【问题标题】:I am getting warning: function returns address of local variable in c我收到警告:函数返回 c 中局部变量的地址
【发布时间】:2012-01-26 02:48:06
【问题描述】:

我有一个存储一些信息的双链接列表。当我尝试返回链接列表中的一个值时,我收到警告:函数返回局部变量的地址。

这是我的退货声明:

return curr_val->value;

值的类型为const void*

方法签名如:void *get_val(int key)

curr_val 是结构体类型。它等于我在链表中​​的一个节点。

如何返回值并且返回后它不会消失?顺便说一句,我无法更改方法签名。

【问题讨论】:

  • 方法签名是什么?什么是curr_val
  • 编辑您的问题,向我们展示函数定义。
  • 您没有添加足够的信息,但@Borealid 可能是正确的。还 +1 表示注意编译器警告。
  • 您可能应该编辑问题以添加函数的代码,以便我们可以找出编译器警告您的原因。但是,正如 Seth 所说,您从我们这里得到了很好的评价,因为您注意编译器警告。编译器费心警告的任何事情都可能是一个问题。他们努力避免给出误报,因为这会破坏警告的有用性。

标签: c


【解决方案1】:

问题很可能是您将堆栈分配变量的地址分配给了value。您需要使用newmalloc 为您打算在当前堆栈帧之外继续存在的变量获取内存。

【讨论】:

  • 我还有一个 set_val(int key, const void* value) 方法。我只是设置“curr_val->value = value;”。那是我应该使用malloc的地方吗?如果是这样,我怎样才能使用 malloc 并且仍然让它等于传入的值?
  • @user972276:如果你把它传递进去,问题是它被谁打电话给set_val
  • newC 的问题没有帮助。
  • @Complicatedseebio:哎呀,没看标签。不过,我还是提到了malloc
猜你喜欢
  • 2011-10-17
  • 2015-04-25
  • 2013-01-30
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2019-06-15
相关资源
最近更新 更多