即使从函数返回,堆栈内存也存在

Stack memory exists even after return from function.?

本文关键字:堆栈 内存 存在 返回 函数      更新时间:2023-10-16

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

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()例程中提供堆栈内存,在退出func(()后,堆栈内存应该是可用的(编译器可以在同一地址分配一些其他变量)。这是正确的方式吗?我认为这可能会导致不确定的行为。。

您说得很对:代码显示出未定义的行为。

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