c语言 - 从链接列表中释放节点(内存明智)



当将列表的头部发送到free()内存的函数时。编译器给出的错误是:

"HEAD CORRUPTION DETECTED: after Normal block (#70) at 0x011BCC0
CRT detected that the application wrote to memory after end of head buffer. "

我试图只free()第一个节点,只是为了看看它是如何进行的,但它是相同的错误.
接收链表本身的函数:

void freeListOfEmployees(EmployeeNode *head)
{
EmployeeNode *ptr = head, *temp = NULL;
while (ptr != NULL) { 
temp = ptr; 
ptr = ptr->next; 
free(temp); 
}
head = NULL;
}

问题不在于freeListOfEmployees,而在于createEmployeeNode,更具体地在这一行中:

EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeData));
^^^^^^                                             ^^^^^^

您正在为EmployeeNode分配内存,但您要求EmployeeData的大小。

这是正确的:

EmployeeNode *temp = (EmployeeNode *)malloc(sizeof(EmployeeNode));

或更好:

EmployeeNode *temp = (EmployeeNode *)malloc(sizeof *temp);

甚至更好:

EmployeeNode *temp = malloc(sizeof *temp);

这样就不可能弄错尺寸。

而且演员(EmployeeNode*)也不是完全错的,而是没用的。

并期待您的下一个问题:为什么问题只发生在freeListOfEmployees而不是以前?

答:因为你正在覆盖不属于你的记忆,这会触发所谓的"未定义的行为",一旦触发了未定义的行为,任何事情都可能发生。未定义的巴哈维包括"显然穿得很好"。

相关内容

  • 没有找到相关文章

最新更新