C - 如何释放动态分配的内存?
C - How can I free dynamically allocated memory?
看看这段代码,它是链表的一部分。
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,分配给node的内存也会被释放吗?如果是,那么如何?
您有内存泄漏,因为您只释放了列表中的第一个节点。您不想在 insertNode
函数中 free
否则您会立即丢弃刚刚分配的内存。
在你的程序结束时,你需要遍历列表和free
每个元素。
while (head1) {
List *temp = head1;
head1 = head1->next;
free(temp);
}
看看这段代码,它是链表的一部分。
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,分配给node的内存也会被释放吗?如果是,那么如何?
您有内存泄漏,因为您只释放了列表中的第一个节点。您不想在 insertNode
函数中 free
否则您会立即丢弃刚刚分配的内存。
在你的程序结束时,你需要遍历列表和free
每个元素。
while (head1) {
List *temp = head1;
head1 = head1->next;
free(temp);
}