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){ };
}
我很確定它不應該崩潰。你是否嘗試過一個最小的例子(例如,你能確定你的代碼中沒有隱藏其他錯誤=> undef。behavior&co)?編譯器,操作系統...? – deviantfan 2014-09-22 00:27:14
你是否可以使用gcc來防止它是一個編譯器錯誤? – 2014-09-22 00:43:08
我其實只有VS在這個系統上。 – 2014-09-22 00:47:15