当将列表的头部发送到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
而不是以前?
答:因为你正在覆盖不属于你的记忆,这会触发所谓的"未定义的行为",一旦触发了未定义的行为,任何事情都可能发生。未定义的巴哈维包括"显然穿得很好"。