![](/img/trans.png)
[英]Why does a memory leak occur in this code when a bad_alloc exception is thrown for T2
[英]is there memory leak when STL throws a “bad_alloc” exception?
我有一個程序,使用STL使用大的數字容器,有時是vector
,有時是deque
; 有時它直接構造一個大vector
,有時它以小尺寸開始,然后使用resize
進行放大。
vector
或deque
構造器或resize
有時會引發“ bad_alloc”異常。 我的問題是,這里是否存在內存泄漏? 如果沒有內存泄漏,我可能仍會繼續。 但是,如果存在,事情就更麻煩了。
我的系統是Windows 7 64位,Visual Studio 2013,並且可以在32位程序上運行。
沒有。
拋出std::bad_alloc
異常並不意味着存在內存泄漏。 這意味着使用運算符new
或運算符new[]
動態分配失敗。
標准容器類型( std::Vector
, std::list
等)使用的默認分配器通常使用運算符new
或new[]
,因此如果它們失敗,也可以拋出std::bad_alloc
。
內存泄漏只是內存耗盡的一種可能原因,而內存耗盡只是使用new
或new[]
動態分配內存失敗的一種可能原因。
一般來說,如果拋出std::bad_alloc
,則意味着分配內存的嘗試失敗了(並且不需要取消分配)。 因此沒有泄漏。 如果某個對象(或類)的實現不佳,則如果引發異常,則可能導致內存泄漏。 該標准描述了標准容器的要求,這些要求可防止假定矢量元素也提供適當保證的情況。
當new
或new[]
無法分配內存時,將引發std::bad_alloc
。
您可能耗盡了主內存? 您可能已經嘗試分配一個特別結構的new int[1024*1024*1024];
? 您的堆可能變得碎片化(許多分配和刪除操作),因此無法分配所需大小的連續內存空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.