这是有效的还是它有未定义的行为:
#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/