2014-09-22 38 views
1

在嘗試使用new進行動態內存分配時,我發現可以請求大量的內存,以至於實現不會拋出bad_alloc異常,但只是崩潰與一個無效的分配錯誤。我試圖用一個簡單的測試,效果測試分配的大小如何計算動態內存請求是否會導致無效分配

if (n >= SIZE_MAX/sizeof(double)) 
     // throw some exception 
    else 
     // try to allocate memory 

其中n是,我試圖分配雙打的次數,但我發現,那通過這個測試請求仍然可以導致程序墜毀。是否有一個簡單的測試是可移植的,可以確定請求是否安全?

謝謝你的時間。

編輯:我很抱歉,這裏是我的系統崩潰的程序的一個例子。我使用Visual Studio創建計劃2013年

#include <cstdint> 
#include <new> 

int main() 
{ 
    size_t n = SIZE_MAX/sizeof(double); 
    double* ptr; 

    try { 
     new double[n]; 
     } catch (std::bad_alloc& e){ }; 
} 
+1

我很確定它不應該崩潰。你是否嘗試過一個最小的例子(例如,你能確定你的代碼中沒有隱藏其他錯誤=> undef。behavior&co)?編譯器,操作系統...? – deviantfan 2014-09-22 00:27:14

+0

你是否可以使用gcc來防止它是一個編譯器錯誤? – 2014-09-22 00:43:08

+0

我其實只有VS在這個系統上。 – 2014-09-22 00:47:15

回答

0

我相信你正在運行到這個錯誤的原因是因爲你試圖分配4GB的內存,在Visual Studio中,你將有一個最大的尺寸,你可以分配總共在你的程序中,這個值可以在配置中改變。如果您嘗試在釋放模式下運行程序,它應該會消失,因爲Visual Studio沒有安全簽入版本。

希望這會有幫助