c - 在C中的循环中获取变量的地址

标签 c

这是有效的还是它有未定义的行为:

#include <stdio.h>

int main(){
 int *a = NULL;
 for (int i=0; i<1; i++){
   int b = 6;
   a = &b; 
 }

 printf("%d\n", *a);
 return 0;
}

一旦 b 离开循环(因此超出范围),是否有可能将其从堆栈中删除?

最佳答案

这是未定义的行为。

变量 b 具有自动存储持续时间:它的存储在声明它的 block 的末尾被释放,即 for 循环。

然后 a 变成了一个悬挂指针。在这种情况下,应用取消引用表达式 *a 是未定义的行为。

https://en.cppreference.com/w/c/language/storage_duration

https://en.cppreference.com/w/c/language/operator_member_access

关于c - 在C中的循环中获取变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368344/

相关文章:

c - 将字符串直接传递给函数

c - RubyInline 包含另一个生成的文件以从该文件调用函数

c - 初始化中的指针目标的符号不同

c - 调用 strcpy 的结果与预期不同

c++ - OpenCV 在新图像中旋转、扭曲和平移 ROI

c - 为什么 fscanf/scanf 正在更改 Ideone.com 上先前扫描的变量的值?

c - Linux进程堆栈被局部变量溢出(堆栈保护)

c++ - Makefile,如何同时链接32位库和64位库

将段落转换为具有动态内存的句子

c - 可能吗?将局部静态值的地址传递给主指针?