gpt4 book ai didi

c - 从内存中释放单链表时出现段错误

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

我对指针和 C 的概念比较陌生,所以如果这是一个非常简单的问题,我深表歉意。我正在尝试从创建的内存中释放一个单向链表。单个列表创建得很好,但我无法将其从内存中释放出来,出现段错误。我哪里出错了?我需要为 freelist 和 freenode 使用单独的方法。 Avail 是一个全局指针变量,是我确信有效的代码的一部分。问题存在于空闲列表中,我只是不确定在哪里。

   void freelist(olnode **list) {
olnode *ptr = *list;
while (*list != NULL) {
ptr = *list
freenode(&ptr);
ptr = ptr->next;
}
}

void freenode(olnode **ptr) {
if(*ptr != NULL) {
(*ptr)->next = avail;
avail = *ptr;
*ptr = NULL:
}
}

最佳答案

Freenode 将传递给它的指针设置为 NULL。之后 freelist 尝试取消引用现在为 null 的指针。这就是程序崩溃的地方。

除此之外,您的程序并没有真正释放任何数据。它只是将指向数据的指针更改为指向 NULL。这意味着内存将保持分配状态并且不可用于新数据。要将指针指向的内存标记为不再需要,您需要调用 free()标准库中指向它的指针上的方法。之后不需要将指针设置为 NULL,但这是一个很好的做法,可以确保任何后续尝试访问释放的内存位置都会导致可预测的崩溃,而不是导致完全不可预测的行为。

关于c - 从内存中释放单链表时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486521/

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