我試圖如下分配一個數組:成員函數內存分配堆棧還是堆?
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將被放置在堆(爲類的實例在堆上)。這似乎並不是這樣,因爲我得到了分段錯誤。如果我將聲明更改爲: double * arr = new double [13 * 64 * 64 * 64]; (並正確刪除它),那麼一切都很好。
這裏發生了什麼?
間接地,數組將被動態分配(因爲foo是動態分配的) - 但是,我很不清楚你想用'foo'中的這個未使用的變量實現什麼? – codeling
@nyarlathotep - 傑克創造了一個最低工作示例來說明他的問題。 –
@nyarlathotep:不,它不會。像任何局部變量一樣,它是自動的,即在堆棧上(除非你指定'static'或'threadlocal',但即使這樣它也不會是動態的)。動態分配一個對象意味着它的成員在堆上。 –