我這樣編碼,但它得到seg-fault。在C++中使用指針陣列
出了什麼問題?
int vector_size = 100000000;
float *rows[vector_size];
for (int i=0; i<vector_size; i++) {
rows[i] = (float *)malloc(sizeof(float)*2); // crashed here
// ...
}
我這樣編碼,但它得到seg-fault。在C++中使用指針陣列
出了什麼問題?
int vector_size = 100000000;
float *rows[vector_size];
for (int i=0; i<vector_size; i++) {
rows[i] = (float *)malloc(sizeof(float)*2); // crashed here
// ...
}
您正試圖分配大量的內存。如果你真的需要這麼多的浮點數,爲每個浮點數使用一個單獨的malloc可能是一個糟糕的計劃。 Malloc有它自己的開銷,因爲有一個可以分配的最小塊大小,並且內存管理器也需要跟蹤所有那些單獨分配的內存區域,更不用說這個指針列表的大小。
一個更好的解決方案可能是在所有彩車單塊足夠的空間來分配,而該指數作爲一個數組,而不是儘量保持指針列表...
所以...
float *rows = malloc(sizeof(float) * vector_size);
可能是一個更好的起點。
謝謝,我太愚蠢了:) – JaycePark 2014-09-26 08:45:25
嘗試分配內存不在堆棧中,但在堆中。
float **rows = new float*[vector_size];
你會得到什麼樣的消息?
它看上去並不像內存溢出,因爲如果內存結束的malloc()返回NULL:\
附:對不起,我的英語)
upd。哦,我沒有看到上面的評論
您的系統的內存溢出可能嗎? – 2014-09-26 08:27:03
您嘗試創建一個幾乎爲400MB的數組(在32位系統上,在64位系統上爲double))。如果將數組聲明爲局部變量,則超出了任何系統的堆棧大小(請記住,大多數(所有?)編譯器都將局部變量存儲在堆棧中,並且堆棧通常位於單位數字MB範圍內) 。 – 2014-09-26 08:28:29
墜毀在我的價值?你有沒有注意到你的系統的堆棧大小限制? – Jepessen 2014-09-26 08:29:39