![](/img/trans.png)
[英]getting error "terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc"
[英]Getting bad_alloc error
我一直在研究我的單詞搜索算法。 它可以完美地工作,但后來我決定在一個大型拼圖(如10000 x 10000)上進行測試,該拼圖中裝有符號。 因此創建了一個小程序,使這個難題變得更加棘手。 然后我跑了字搜索它與bad_alloc崩潰了。 我使用2D陣列。 碼:
string ** Matrix = new string*[Height];
for(int i = 0; i < Height; ++i)
{
Matrix[i] = new string[Widht];
}
高度=寬度= 10000;
而且我不知道為什么。 我讀過,新的實際上沒有限制,那么為什么會崩潰?
順便說一句,我只是為了好玩而打開了Windows任務管理器,而程序試圖分配內存,而內存上升到2m +,然后崩潰了。
對於調試構建中的類對象,std :: string類的長度為28個字節。 不計算實際字符串所需的任何存儲量。 因此,您的程序分配了10000 x 10000 x 28 = 2.8 GB。 Windows中的32位進程不能分配超過2 GB的內存,無論您付出還是付出,您都遠遠超過了該限制。
您將需要編寫更智能的代碼或切換到64位代碼生成。 一個明顯的成功方法是認識到單詞搜索程序每個單元只需要一個字符,而不需要整個字符串。 因此,一個char
就足夠了。 或將整個網格行存儲到單個std :: string中。 輕松減少兩個數量級的內存需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.