我现在正在学习cpp一个月,而且我一直认为在函数范围之外无法访问函数内部的变量,这些变量在栈中初始化。但是,当我使用指向函数成员的全局指针时,似乎不是这种情况,如下例所示:
#include <iostream>
void fun(void); int *pInt;
int main(int argc, char **argv) {
pInt = 0;
fun();
std::cout << "*pInt = " << *pInt << std::endl;
return 0;
}
void fun(void) {
int a = 3;
pInt = &a;
}
编译并运行它不会产生任何错误,并且确实会打印出预期的结果。 为什么会这样?在函数fun超出范围之后,是不是“a”假设超出范围(因此它的值)?
答案 0 :(得分:0)
不,你看到的是undefined behavior。
fab
函数完成执行后,fun()
不再存在。因此,在a
中,任何试图取消引用指针(先前)指向main()
的内存位置的尝试都会调用UB。