结构节点下一个指针

时间:2012-07-08 10:42:12

标签: c pointers free

我有一个结构,它包含一个指向同一类型结构的next指针。

我有以下代码,它存储node指针存储的结构的编号,释放它,并将节点设置为node->next。如果在node->next之前调用free,那么double data = node->element; free(node) node = node->next; return data; 如何知道它是什么?

node

但是,遵循相同的逻辑,以下代码段错误。唯一的区别是它使用struct node *temp; temp = node; free(node); node = node->next; return temp; 而另一个只是将元素存储在其基本数据类型中。

{{1}}

为什么会这样?第一部分代码如何工作?

由于

1 个答案:

答案 0 :(得分:2)

你不应该永远取消引用一个释放的指针 - 它是在寻找麻烦,可能是你的段错误的来源。即使它不是段错误,也不能对该内存地址的数据的真实性做出任何假设,因此这不是一件好事。 您没有在问题中提供太多详细信息,但为什么不稍微修改您的代码来尝试此命令

struct node *temp = node->next;
free(node);
return temp;

这样你就可以在删除node之前存储指针而不应该得到段错误

至于第一个代码

double data = node->element;
free(node)
node = node->next;
return data;

为什么不用

替换
double data = node->element;
free(node)
return data;

因为这会删除访问已释放内存的代码和行

node = node->next;

几乎毫无意义,无论如何你在下一行中都可以免费node