看看这段代码,它是链表的一部分。
int main()
{
List* head1 = NULL;
insertFront(&head1, 1);
insertFront(&head1, 2);
print(head1);
free(head1);
return 0;
}
另一个函数是:
void insertFront(List** head, int value)
{
List* node = (List*)malloc(sizeof(List));
node->data = value;
node->next = NULL;
node->next = *head;
*head = node;
//free(node); essentially I am not freeing node
}
我的问题是:
我的代码会导致内存泄漏问题吗?
我是否需要为节点(在函数内部)释放分配的内存(动态)?
如果我释放 head1,分配给节点的内存是否也会被释放?如果是,那又如何?
最佳答案
您有内存泄漏,因为您只释放了列表中的第一个节点。您不想在 insertNode
函数中 free
,否则您会立即丢弃刚刚分配的内存。
在程序结束时,您需要遍历列表并释放
每个元素。
while (head1) {
List *temp = head1;
head1 = head1->next;
free(temp);
}
关于C - 如何释放动态分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900527/