我的程序中有一個相當嚴重的錯誤 - 偶爾會調用new()拋出bad_alloc。調試策略找到bad_alloc的原因
從文檔我可以找到關於bad_alloc的,它似乎被拋出這些原因:
當計算機運行的內存(這肯定是不會發生的,我有4GB的內存,程序在使用少於5MB(在taskmanager中檢查)時拋出bad_alloc,而沒有任何嚴重的後臺運行)。
如果內存變得過於分散,無法分配新塊(這再次不太可能 - 我分配的最大塊大小約爲1KB,並且在崩潰發生之前不會超過100次)。
基於這些描述,我並沒有真正的bad_alloc可以拋出的地方。
但是,我正在運行的應用程序運行多個線程,這可能會導致問題。通過測試單個線程上的所有對象,一切似乎都能順利進行。我能想到的唯一另外一件事情就是在這裏發生的可能是由於在同一時間在多個地方調用new()而導致的某種競爭條件,但我嘗試添加互斥體以防止該行爲沒有效果。
因爲程序有幾百行,我不知道問題的實際位置,所以我不確定要發佈什麼代碼片段。相反,我想知道是否有任何工具可以幫助我測試這種事情,或者是否有任何一般策略可以幫助我解決這個問題。
我正在使用Microsoft Visual Studio 2008與Poco進行線程化。
其實這就是問題所在......不知道問題出在哪裏,但是有很多變形的變量在奇怪的地方四處遊蕩 - 看起來就像某處存在競爭條件。謝謝! – Salami 2010-03-20 05:17:42
這就是我的情況......我以爲我在調用'new char [_len]',但是當'len'沒有被初始化時,我正在調用'new char [len]',所以可能有一些很大的數字。這真的有助於思考我要求多少空間,並更仔細地看待價值。感謝你的回答。 – flcoder 2018-01-29 19:54:08