从函数返回后,堆栈存储器仍然存在。

时间:2014-04-19 09:20:10

标签: c++ arrays memory

所以,我在一本书中得到了一个例子:

int * func()
{
    int A[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    return (int*)A;
}

void main(void)
{
    int *a = func();
    cout << *(a + 2*3 + 1);
    system("PAUSE");
}

我试过运行它并且工作正常。

我的问题是我们在func()例程中提供了堆栈内存,这些内存应该可用(编译器可以在同一地址分配一些其他变量)。这是正确的方法吗?我认为这可能会导致UnDefined Behavior ..

1 个答案:

答案 0 :(得分:0)

你是对的:代码展示undefined behaviour

另一方面,如果Astatic或堆分配,情况可能会有所不同。