即使从函数返回,堆栈内存也存在
Stack memory exists even after return from function.?
所以,我在一本书中得到了一个例子:
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(()后,堆栈内存应该是可用的(编译器可以在同一地址分配一些其他变量)。这是正确的方式吗?我认为这可能会导致不确定的行为。。
您说得很对:代码显示出未定义的行为。
另一方面,如果A
是static
或堆分配的,情况可能会大不相同。
相关文章:
- 清除在 main() 中分配的堆栈内存?
- C++堆栈内存管理问题
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 使用 static 关键字禁止使用堆栈内存
- 测量静态,堆和堆栈内存?(C ,Linux -CentOS 7)
- 从函数返回变量地址时如何修复"与局部变量关联的堆栈内存地址"?
- c++中变量的堆栈内存分配
- C++ 编译器是否将这种形式的"new"视为堆栈内存?
- 堆栈内存错误创建核心文件
- 类堆栈内存问题(致命错误)
- 返回的与局部变量关联的堆栈内存的地址 (C++)
- 一个程序将分配多少堆栈内存
- 具有类作用域的动态分配堆栈内存
- 动态内存、堆栈内存和静态内存与c++中的区别
- 是我的堆栈内存空间膨胀
- 为什么堆栈内存的 memcpy 比堆内存快得多
- 找出哪个对象/数组使用最多的堆栈内存
- 堆栈内存/堆栈
- 为什么堆栈内存大小如此有限
- 处理分配的内存和堆栈内存