查看这段代码,它是链接列表的一部分。
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,是否也会释放为节点分配的内存?如果是,那怎么做?
答案 0 :(得分:5)
您有内存泄漏,因为您只释放列表中的第一个节点。您不希望在free
函数中insertNode
,否则您会立即丢弃刚刚分配的内存。
在程序结束时,您需要遍历列表并free
每个元素。
while (head1) {
List *temp = head1;
head1 = head1->next;
free(temp);
}