成员函数内存分配堆栈还是堆?

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]; (并正确删除)然后一切都很好.

这里发生了什么事?

Hug*_*ius 6

您将成员变量与成员函数内声明的变量混淆.

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在堆栈上分配数组.