c - 在 main 中调用此函数时,局部变量是否会从内存中删除

标签 c data-structures global-variables local

Possible Duplicate:
Can a local variable's memory be accessed outside its scope?
returning address of local variable

我有一个问题,首先看代码

    #include <stdio.h>

int sum();          /* function declaration */

int main()
{
    int *p2;
    p2 = sum();         /* Calling function sum and coping its return type to pointer variable p2  */
    printf("%d",*p2);
} /*  END of main  */ `

int sum()           
{
    int a = 10;
    int *p = &a;
    return p;
} /*  END of sum */

我认为答案是 10 和变量 a 的地址,但我的老师说 a 是函数的局部变量,所以 a 及其 当函数返回或执行完毕时,值将从内存位置删除。我尝试了这段代码,答案当然是 10 和 a 的地址,我使用 GNU/GCC 编译器。谁能说出什么是对什么是错。 提前致谢。

最佳答案

你的老师是绝对正确的:即使你修复你的程序以返回 int* 代替 int,你的程序仍然包含未定义的行为。问题在于,一旦 sum 返回,曾经放置 a 的内存就可以重用了。内存可能会保持原样供您访问,因此您甚至可能会打印十个,但此行为仍然未定义:它可能在一个平台上运行并在其他十个平台上崩溃。

关于c - 在 main 中调用此函数时,局部变量是否会从内存中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015002/

相关文章:

c++ - 输入 1024 后十进制到二进制转换的错误输出?

c++ - 什么样的数据结构适合facebook模型的用户

swift - 为什么我不能在 swift 中使用一个全局变量作为另一个全局变量定义的一部分?

algorithm - 用于反转 log(n) 中的子数组的数据结构

c# - 关系的数据结构

c - 如何将全局值从 C 传递到 LUA?

database - MS access 2010 中的 web DB 将用户登录保存到全局变量中

c++ - 为什么在宏中使用看似毫无意义的 do-while 和 if-else 语句?

c - 用C获取文件中每一行的长度并写入输出文件

c - 如果用户选择特定功能,则结束循环