gpt4 book ai didi

c - 释放后如何打印链表?

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:29 25 4
gpt4 key购买 nike

我正在使用这些函数实现链表:

struct node{
int data;
struct node *next;
};

struct list{
struct node *head;
};

struct list* list_init(){
struct list *lst;
lst = malloc (sizeof(struct list));
lst->head = 0;
};

list_add(struct list *l, int num){
struct node *point;
point = malloc(sizeof(struct node)):

if (&point == NULL){
return 1;
}
else {
point->data = num;
point->next = l->head;
l->head = point;
return 0;
}
};

void list_print(struct list *l){
struct node *point = l->head;
while (point != 0) {
printf("value = %d and next pointer = %p\n", point->data, point->next);
point = point->next;
}
};

void list_cleanup(struct list l*){
struct node *point;
struct node *temp;
while (point != 0);
temp = point;
point = point->next;
free(temp);
}
};

我不明白为什么当我运行 main:

int main(int argc, char *argv[]) {
struct list *a;
a = list_init();
list_add(a, 10);
list_add(a, 53);
list_add(a, 66);
list_print(a);
list_cleanup(a);
list print(a);

输出将是:

66 0x10570b0
53 0x1057090
10 (nil)

17133760 0x10570b0
17133728 0x1057090
17122696 (nil)

我理解前 3 个输出值,它们是我链表中指针值的值。然而,在遍历列表并释放内存之后,list_print() 怎么可能输出正确的指针值和列表的正确长度?释放内存后这应该不可能吧?

最佳答案

释放内存后,您使该地址可供计算机使用(可访问),以便其他程序使用。如果没有程序使用该区域,则意味着不会覆盖该区域,因此在释放该地址之前它保持不变

关于c - 释放后如何打印链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42400224/

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