c-结构节点下一个指针



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

我有以下代码,它存储node指针存储的结构的编号,释放它,并将节点设置为node->next。如果free就在它之前被调用,那么node->next是什么?

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

但是,遵循相同的逻辑,下面的代码segfault。唯一的区别是,它使用node,而另一个只是将元素存储在其基本数据类型中。

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

为什么会发生这种情况?那么第一段代码是如何工作的呢?

感谢

您不应该任何时候取消引用释放的指针-这会带来麻烦,很可能是您的segfault的来源。即使它没有分段,你也不能对该内存地址的数据的有效性做出任何假设,所以这不是一件好事。你还没有在你的问题中给出太多细节,但为什么不稍微修改一下你的代码来尝试这个订单呢

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

通过这种方式,您可以在删除node之前存储指针,并且不应该获得segfault

关于第一个代码

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

为什么不直接用取代呢

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

因为这会删除访问释放内存的代码,以及您的线路

node = node->next;

当您在下一行中释放node时,这实际上毫无意义。

相关内容

最新更新