C语言 释放函数内的内存,而不是在同一作用域中



假设我有以下链表:

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

我想使用函数delete_list释放链表list的内存:

void delete_list(struct ListNode *list) {
while (list != NULL) {
struct ListNode *temp = list;
list = temp->next;
free(temp);
}
}
int main() {
struct ListNode *list = create_digit_list(56458);
list_print(list);
//    while (list != NULL) {
//        struct ListNode *temp = list;
//        list = temp->next;
//        free(temp);
//    }
delete_list(list);
list_print(list);
return 0;
}

当我在同一作用域中释放我的列表时,我得到listNULL。但是由于某种原因,当使用my函数delete_list并传递我的list作为参数使用free my链表时,list不是NULL,因此代码打印了一个无限循环的垃圾。这两种方式的区别是什么?什么是正确的方法来提取自由操作的功能?

实际上有两个名为list的变量。一个在main函数内部,另一个是delete_list函数的参数。为简单起见,让它们分别为list1list2

list1变量在main函数中被释放时。list1变量的最终值为NULL

当你将list1变量传递给函数delete_list时,它的值被复制到delete_list函数作用域中的list2变量中。当函数返回;list2变量的最终值为NULL。但是list1仍然有你已经释放的结构体的原始地址。这会导致显示垃圾值。

试着重命名你的变量,这会让我更清楚。如果你愿意,你可以传递你的指针作为引用,这也会影响原始指针,并将其设置为NULL

相关内容

  • 没有找到相关文章

最新更新