C语言中返回局部变量或临时变量的地址的错误

原创 2015年07月06日 16:13:41

先看如下代码, 在编译运行的时候会抛出警告——-warning C4172: 返回局部变量或临时变量的地址,并且在main函数中的打印结果不符合我们的预期

代码如下:

int* visitArea(){
    int a = 10;
    return &a;
}


int main(){
    int* a = visitArea();
    printf("%d\n", *a);
    printf("%d\n", *a);
    printf("%d\n", *a);
    return 0;
}

打印结果:

10
-2
-2
请按任意键继续. . .

我们通过上面可以发现main函数调用visitArea ,返回visitArea中的局部变量的地址,然后赋值给main函数中的变量进行打印, 第一个printf语句打印出了符合我们预期的结果,但是接下来的两个语句打印的结果不符合我们的预期, 这是为什么呢?

在C语言中,局部变量是分配在栈空间上的, 当函数调用结束后,他由编译器释放. 我们通过调用visitArea得到了他的局部变量的内存地址, 然而在第二次打印的时候他这个内存地址被”破坏”了, 所以出现了这个意想不到的结果.

所以我们在书写C语言程序时候, 如果返回指针(变量地址),应该返回堆区或者全局区的,这样就可以避免这个”意想不到的”结果

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于 C++ 函数返回局部变量的警告

关于 C++ 函数返回局部变量的警告 当函数返回时,局部变量和临时对象被销毁,所以返回的地址是无效的。需要修改代码,使其不返回局部对象的地址。 那么如何解决?该怎么修改代码?...
  • maxsky
  • maxsky
  • 2014年11月27日 16:21
  • 4675

C/C++ waring:返回局部变量或临时变量的地址

牛客题目: string& test_str() { string str = "test"; return str; } int main() { string& str_ref...
  • u012222482
  • u012222482
  • 2016年09月07日 12:35
  • 1228

【c语言】关于临时变量出其作用域就释放的例子

// 关于临时变量出其作用域就释放的例子 #include // 临时变量s出函数作用域就销毁了,该空间里就是随机值 unsigned short *sum(unsigned char a, u...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015年05月08日 20:51
  • 712

解决c/c++函数返回局部变量char*的错误

http://blog.csdn.net/maxsky/article/details/41547399 先来一段代码: [cpp] view plaincopyprint? ...
  • earbao
  • earbao
  • 2015年06月04日 11:29
  • 2738

指向临时变量的指针的返回

一直以为对于函数返回的指针了解得还可以,但是真实不用不知道,一用吓一跳。今天在一篇博客上面看到如下两段代码,博客的作者给出了一个问题,但是并没有解释为什么不同。自己通过实验给出了解释,但是不知道对不对...
  • bigloomy
  • bigloomy
  • 2011年06月22日 21:36
  • 4639

C语言中返回局部变量或临时变量的地址的错误

先看如下代码, 在编译运行的时候会抛出警告——-warning C4172: 返回局部变量或临时变量的地址,并且在main函数中的打印结果不符合我们的预期代码如下:int* visitArea(){ ...
  • ic_tv
  • ic_tv
  • 2015年07月06日 16:13
  • 1621

C语言函数不能返回局部变量的地址

在C中,正常情况下,我们只能从函数中返回一个值。但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的...
  • hanghangde
  • hanghangde
  • 2015年12月21日 12:44
  • 1532

C语言--返回局部变量的地址

我们可能会经常写出这样的代码:int  add(int  a , int  b){ return  a + b;}当然,这是合理的写法,使函数的返回值为 int ,所以,调用函数后会返回一个int型的...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年07月27日 13:02
  • 2886

临时变量在内存中的地址分配

程序中的临时变量存储在栈中,而栈中的数据存储地址为由高向低存放,这里的由高向低指的是不同内型的数据之间,而同一个数据的地址存放依然为由低向高的存放:...
  • hayatta
  • hayatta
  • 2015年07月28日 16:23
  • 187

为什么不能从子函数中返回临时对象的指针和引用,却可以返回一个临时变量的值

参考文章链接: http://blog.csdn.net/hlsdbd1990/article/details/45970959 http://blog.csdn.net/misskissc/arti...
  • u014077947
  • u014077947
  • 2017年09月06日 08:54
  • 157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中返回局部变量或临时变量的地址的错误
举报原因:
原因补充:

(最多只允许输入30个字)