gpt4 book ai didi

C free() 链表中的内存

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:54 26 4
gpt4 key购买 nike

我用 1->2->3 打印了一个单向链表。然后我尝试使用 free(head); 释放 head 的内存,我得到了 0->2->3 作为输出。

我想知道为什么释放内存后头节点的*next还存在。当我传递给 print 函数时,我认为 *head 中应该没有任何内容。

抱歉,我是 C 语言和内存管理的新手。如果可能,请帮我一些提示。

#include <stdio.h>
#include <stdlib.h>

struct ListNode{
int val;
struct ListNode *next;
} ListNode;

void addNode(struct ListNode *head, int val);
void printNode(struct ListNode *head);
struct ListNode* deleteNode(struct ListNode* head, int val);

int main(int argc, char **argv){

struct ListNode* head;
head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 1;
addNode(head, 2);
addNode(head, 3);

//test A: print the linked list value: 1 2 3
printNode(head);
printf("\n");

//test B: free memory : 0 2 3
struct ListNode* cur = head;
free(head);
printNode(head);

return 0;
}


void addNode(struct ListNode *head, int val){
struct ListNode* cur = head;
while(cur->next){
cur = cur->next;
}
struct ListNode* t;
t = (struct ListNode*)malloc(sizeof(struct ListNode));
t->val = val;

cur->next = t;
}


void printNode(struct ListNode *head){
struct ListNode* cur = head;
while(cur){
printf("%d ", cur->val);
cur = cur->next;
}
}

最佳答案

您还需要从 addNode() 函数中释放分配的节点,而不仅仅是头节点。作为新手,开始学习使用 valgrind 检查内存泄漏。继续努力吧。 Valgring quick start

关于C free() 链表中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596083/

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