Jac*_*ack 2 c++ heap stack memory-management
我正在尝试按如下方式分配数组:
class foo{
public:
void func(){double arr[13][64][64][64];}
};
int main()
{
foo* inst = new foo();
inst->func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的答案如下: 这种类型的内存是在堆还是堆栈上分配的? 数组arr将放在堆上(因为类的实例在堆上).当我遇到分段错误时,情况似乎并非如此.如果我将声明更改为:double*arr = new double [13*64*64*64]; (并正确删除)然后一切都很好.
这里发生了什么事?
您将成员变量与成员函数内声明的变量混淆.
class Foo {
public:
int arr[13][64][64][64]; //Will be allocated in the same memory as the instance
void func() {
int arr2[13][64][64][64]; //Will always be allocated on the stack
};
};
Run Code Online (Sandbox Code Playgroud)
因此,如果已Foo* foo = new Foo() arr在堆上分配,因为整个foo对象都在堆上分配.另一方面,Foo bar();现在arr在堆栈bar上分配,因为在堆栈上分配.
调用其中一个foo->func()或bar.func()将arr1在堆栈上分配数组.