Seb*_*ger 2 c pointers reference
可能重复:
可以在其范围之外访问局部变量的内存吗?
今天我参加了一个关于基本C编码的研讨会,我们偶然发现了一个脑力激荡器,现在的助手都没有能够回答我的内容.
代码是:
#include <studio.h>
int *f(int a) {
int b = 2 * a;
return &b;
}
int main(void) {
int *p4;
int *p8;
p4 = f(4);
p8 = f(8);
printf("p4: %i / p8: %i\n", *p4, *p8);
}
Run Code Online (Sandbox Code Playgroud)
我知道代码有什么问题,我自己也不会编写类似的东西,但它仍然很有趣.
输出是:
p4:16 / p8:16
Run Code Online (Sandbox Code Playgroud)
当然是有意的
p4:8 / p8:16
Run Code Online (Sandbox Code Playgroud)
我最初的预期是我们得到一个错误,因为在功能f通过后&b
不再存在(变量范围).
助手们把它解释为"幸运的一击",那个位置的记忆中还有一些东西,但这对我来说并没有真正做到.
我认为id在这里发布,看看是否有人有更好的解释.
IMPORTANT:
这不是一个如何在函数中添加2个int的问题 - 我相当能干 - 它:为什么在为printf检索它时将数字16存储在*p4.
期待着鼓舞人心的答案,塞巴斯蒂安
当为printf检索数字时,为什么数字16存储在*p4.
未定义的行为 - 任何事情都可能发生.
int *f(int a) {
int b = 2 * a;
return &b;
}
Run Code Online (Sandbox Code Playgroud)
您正在返回一个指向已销毁变量的指针,然后您访问该内存位置.那是UB.