链接列表函数返回局部变量的地址

时间:2017-09-27 06:00:19

标签: c linked-list

我在C中实现了一个链表程序,create_node函数给出了一个警告:function返回局部变量的地址。我已经阅读了有关使用malloc的内容,但我想了解没有它的原始问题和解决方案。感谢。

struct list_node_s* Create_node(int val, struct list_node_s* node_p) {
   struct list_node_s temp;

   temp.data = val;
   temp.next_p = node_p;
   return &temp;
}  /* Create_node */

1 个答案:

答案 0 :(得分:0)

问题是您的temp变量是本地变量。它具有功能范围,因此只要您的程序在函数中,它就存在。这通常使用堆栈实现。

您应该使用malloc获取内存,这是所有动态分配的来源。这样,列表及其节点将一直存在,直到您使用free明确销毁它们。

我不推荐的唯一其他解决方案是使用递归函数调用构建列表。只要您使用列表永不返回

我看到这样做了一次。这很可怕。但可能。