This question already has answers here:
Can a local variable's memory be accessed outside its scope?
(20个答案)
6年前关闭。
我的问题是-由于从
(20个答案)
6年前关闭。
void foo(int** ptr) {
int value = 4;
*ptr = &value;
// **ptr = value;
}
int main(void) {
int value = 7;
int* ptr = &value;
foo(&ptr);
cout << *ptr << endl; // 4
return 0;
}
我的问题是-由于从
value = 4
返回后foo
不再有效/不在范围内,为什么*ptr
显示4
而不是某些垃圾值? 最佳答案
因为您要返回指向局部变量的指针,所以这是未定义的行为。这包括“出现”工作,但是在一般情况下依靠它是一个可怕的想法。
在这种特定情况下,该值保留在堆栈上,并且在调用*ptr
之后和任何其他函数调用之前,似乎生成的代码将获取foo
。这样,该值尚未被任何其他函数调用覆盖。
如果要在foo(&ptr)
和cout << ...
语句之间插入函数调用,则该值很有可能是垃圾。
关于c++ - 指针可以将局部变量的内存指向范围之外吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25314819/
10-17 00:31