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

Freeing Node from LinkedList ( memory wise )

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

回答:因为你覆盖了不属于你的内存,触发了所谓的"undefined behaviour",一旦未定义的行为被触发,任何事情都可能发生。未定义的行为包括 "apparently woring fine".