gpt4 book ai didi

c - 从链表中释放节点(内存方面)

转载 作者:行者123 更新时间:2023-11-30 20:57:51 25 4
gpt4 key购买 nike

当将列表的头部发送到 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 中而不是之前?

回答:因为你覆盖了不属于你的内存,这会触发所谓的“未定义行为”,一旦触发未定义行为,任何事情都可能发生。未定义行为包括“显然工作得很好”。

关于c - 从链表中释放节点(内存方面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com