【发布时间】:2016-06-22 23:48:46
【问题描述】:
在实现单链表时,我遇到了一个似乎很奇怪的问题。我调用 list_destroyer 并将指针传递给列表的头部,但是当方法返回时,传递的指针仍然指向完整列表。我不相信我已经在任何地方传递了结构。
这是我的结构列表和类型定义
typedef struct list list_t
struct list{
void* datum;
list_t* next;
};
这是导致问题的代码
void list_destroy(list_t *head){
list_t *destroy = head;
while(head){
//printf("%d \n", list_size(head));
head = head->next;
free(destroy);
destroy = head;
}
//printf("%d \n", list_size(head));
head = NULL;
//printf("%d \n", list_size(head));
}
list_size 函数已被注释掉,因为它们不是必需的,但我使用它们来查看代码的输出。 printf 输出显示大小正在减小。围绕“head = NULL;”的两个printf语句都打印大小为零。 gdb 也证实了这一点。但是,当我有这段代码(以下)调用 list_destroy 时,传递的指针是不变的。
int main(){
list_t *test = NULL;
int a = 1;
int b = 2;
list_append(test,&a);
list_append(test,&b);
printf("%d \n", list_size(test));
list_destroy(test);
printf("%d \n", list_size(test));
}
我仍然得到 list_destroy 上方和下方的 printf 来输出 2。我没有在任何地方初始化新的 list_t,所以我看不到 list_destroy 之后的 printf 仍然会输出 2,(尤其是当 printf在 list_destroy 中表示传入的 list_t* 最后的大小为 0。
【问题讨论】:
-
我不知道这是否是一个充分的解释(我没有详细查看您的代码)但释放内存并不会覆盖它。
标签: c singly-linked-list