2016-12-08 116 views
0

爲了簡單起見,請考慮這個具有3個屬性的類。C++異常:std :: bad_alloc

class Human 
{ 
    public: 
    int id; 
    int age; 
    std::string name; 
}; 

int main() 
{ 
Human *h = new Human[120000]; <-- breaking 
    return 0; 
} 

我得到的錯誤是在在0x76ACC52F在Human.exe 未處理的異常:微軟C++異常:性病:: bad_alloc的內存位置0x000D0EA8。

運行該程序的機器具有32 GB RAM和1 TB硬盤,並且分頁打開。人類有大約350個屬性。我檢查並發現每個Human對象大約需要29000字節。所以總計它應該分配29000 X 120000 = 3.48 GB

我假設這是一個內存問題,程序沒有足夠的內存來完成新的操作。爲什麼。 32 GB不是一個小內存。除Visual Studio運行此C++程序外,沒有任何其他程序正在運行。

請讓我知道你對這個問題的想法和一個可能的解決方案。

非常感謝。

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/130287/discussion-on-question-by-blue-piranha-c-exception-stdbad-alloc)。 –

回答

0

因此,如註釋中所示,以64位編譯可解決問題,但您應該使用鏈接列表而不是數組,因爲它不需要連續的內存塊。

+2

可能是糟糕的性能方面這麼做......將數組分割成一些塊可能會更有效率。訪問鏈表中的隨機元素是O(n)。 – Asu

+0

...或動態分配''人類'這可能會節省在該連續塊的一些空間。 – Asu

相關問題