簡體   English   中英

STL引發“ bad_alloc”異常時是否存在內存泄漏?

[英]is there memory leak when STL throws a “bad_alloc” exception?

我有一個程序,使用STL使用大的數字容器,有時是vector ,有時是deque 有時它直接構造一個大vector ,有時它以小尺寸開始,然后使用resize進行放大。

vectordeque構造器或resize有時會引發“ bad_alloc”異常。 我的問題是,這里是否存在內存泄漏? 如果沒有內存泄漏,我可能仍會繼續。 但是,如果存在,事情就更麻煩了。

我的系統是Windows 7 64位,Visual Studio 2013,並且可以在32位程序上運行。

沒有。

拋出std::bad_alloc異常並不意味着存在內存泄漏。 這意味着使用運算符new或運算符new[]動態分配失敗。

標准容器類型( std::Vectorstd::list等)使用的默認分配器通常使用運算符newnew[] ,因此如果它們失敗,也可以拋出std::bad_alloc

內存泄漏只是內存耗盡的一種可能原因,而內存耗盡只是使用newnew[]動態分配內存失敗的一種可能原因。

一般來說,如果拋出std::bad_alloc ,則意味着分配內存的嘗試失敗了(並且不需要取消分配)。 因此沒有泄漏。 如果某個對象(或類)的實現不佳,則如果引發異常,則可能導致內存泄漏。 該標准描述了標准容器的要求,這些要求可防止假定矢量元素也提供適當保證的情況。

newnew[]無法分配內存時,將引發std::bad_alloc

您可能耗盡了主內存? 您可能已經嘗試分配一個特別結構的new int[1024*1024*1024]; 您的堆可能變得碎片化(許多分配和刪除操作),因此無法分配所需大小的連續內存空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM