试图在函数中返回局部变量的地址

时间:2014-06-18 12:05:05

标签: c function pointers

我想在函数k中返回变量func()的地址。以下是2个功能。

  

main()功能

#include <stdio.h>

main()
{
  int* j;
  int* func();

  j= func();
  printf("\n%d",*j);
}


  

func()功能

int* func()
{
  static int k=30;
  return (&k);
}


我希望int *func()返回k的地址,但会显示以下错误。

function returns address of local variable [-Wreturn-local-addr]

return (&k);

3 个答案:

答案 0 :(得分:3)

k是一个局部变量,仅存在于函数func内 所以你要返回k不存在的地址 它是undefined behavior

您可以为k分配动态内存:

int *k = (int*)malloc(sizeof(int));  
*k = 30
return k;  

不要忘记释放main

中的记忆
free(j);

答案 1 :(得分:2)

这不是错误,而是一个警告。你仍然不应该这样做,因为只要局部变量超出范围(如返回的情况),它就会在逻辑上抓住存在,不应该以不可预测的行为为代价使用。

答案 2 :(得分:0)

 int* func()
 {
   static int k=30;
   return &k;
 }