This question already has answers here:
Can a local variable's memory be accessed outside its scope?

(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