【发布时间】:2013-10-29 19:43:36
【问题描述】:
我正在尝试按如下方式分配一个数组:
class foo{
public:
void func(){double arr[13][64][64][64];}
};
int main()
{
foo* inst = new foo();
inst->func();
return 0;
}
我对答案的印象是: Does this type of memory get allocated on the heap or the stack? 数组 arr 将被放置在堆上(因为类的实例在堆上)。当我遇到分段错误时,情况似乎并非如此。如果我将 a 的声明更改为: 双* arr = 新双[13*64*64*64]; (并正确删除)然后一切都很好。
这里发生了什么?
【问题讨论】:
-
间接地,数组将被动态分配(因为 foo 是动态分配的) - 但是,我很不清楚你想用
foo中的这个未使用的变量来实现什么? -
@nyarlathotep - Jack 创建了一个最小的工作示例来说明他的问题。
-
@nyarlathotep:不,不会。像任何局部变量一样,它是自动的,即在堆栈上(除非您指定
static或threadlocal,但即使那样它也不会是动态的)。动态分配一个对象只意味着它的成员在堆上。 -
啊,当然,与链接问题的区别在于它在方法中而不是类的成员中,对,就像 Hugo T 的回答指出的那样?谢谢指正
标签: c++ memory-management heap-memory stack-memory