c - 分配给另一个函数的局部变量的自动存储类变量的地址

标签 c

#include <stdio.h>

int* function1(void);

int main()
{

    int x = 10;
    int *p = function1();

    printf("%d\n", *p);
    printf("%d\n", p);
}

int* function1(void)
{
    int z;
    z = 20;
    z++;
    return &z;
}
  • 变量“z”是“function1”的本地变量,并且在 “function1”已终止。
  • 现在要访问变量“z”的内存空间中的值,其 地址由函数返回。
  • 所以,即使终止后,变量的内存空间也会 'z' 仍将被保留,因为指针访问变量?在这种情况下,内存空间的属性是什么?
  • 或者如果其他变量分配了相同的内存空间怎么办 变量“z”?

注意:代码块的GCC编译器已成功编译程序,没有任何错误和警告。

最佳答案

一般来说,您所做的事情未定义

但是,在 Intel 架构上,z 位于堆栈中,返回后,如果您不调用任何其他函数,该值可能> 仍然可用,因为内存尚未被重用。一旦您调用另一个函数,内存可能将被覆盖,因此将包含垃圾。

一般来说:不要这样做!

关于c - 分配给另一个函数的局部变量的自动存储类变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515951/

相关文章:

c - 在 Ubuntu 上使用库部署 C 程序的最佳实践

c - BITMAPINFOHEADER biHeight 是我预期的两倍

c - 从 STDIN 读取用户输入时出现段错误

c - 链表删除root之后的节点

c - 指定 RIDEV_NOLEGACY 时,Win32 原始输入会阻止输入区域设置切换

c++ - sprintf '+' 字符不打印

c - 用于创建 2 个结构的单个 malloc

c++ - 为什么在 Win32 中使用 `GetAsyncKeyState()` 时我的热键会出错?

计算二维网格中的字符数 C

c - 8位处理器必须面对字节顺序问题吗?