簡體   English   中英

C ++內存泄漏與unordered_map

[英]C++ memory leaks with unordered_map

我發現在我的應用程序中某處存在內存泄漏,但我一直在縮小范圍。 我已嘗試按照此示例中的說明使用函數_CrtDumpMemoryLeaks ,但它不顯示文件名。 因此,我一直在嘗試通過在各個點放置對此轉儲函數的調用來找到內存泄漏的第一點(因為根據輸出似乎有很多)。 似乎我很早就在我的構造函數中為對象提供了很多它們。

經過進一步調查,我似乎得到了std::unordered_map定義,甚至到了一個簡單的main函數,它只是聲明一個局部變量有一個內存泄漏。

例如,以下代碼會產生內存泄漏:

void main()
{
    _CrtDumpMemoryLeaks(); // executing this line, no memeory leaks found

    std::unordered_map<int, int> intMap;

    _CrtDumpMemoryLeaks(); // executing this line, memeory leaks found
}

我在這一點上完全感到困惑,並且覺得追逐這個並不能幫助我找到我最初注意到的內存泄漏。

很感謝任何形式的幫助。

所以你期望std::unordered_map<T>在你堅持一個對象的時候沒有任何內存? 這似乎是一個不合理的假設! 至少,你應該銷毀你創建的對象:

int main()
{
    _CrtDumpMemoryLeaks(); // executing this line, no memeory leaks found

    {
        std::unordered_map<int, int> intMap;
    }

    _CrtDumpMemoryLeaks(); // executing this line, memeory leaks found
}

我不知道這是否會釋放所有內存,但它有更好的機會。 標准C ++庫仍然可以在其內存分配機制中保留一些內存。

除了“已經分配但尚未釋放的內存”之外,內存泄漏的定義是什么?

如果unordered_map構造函數在內部分配任何內存,那么你就有了“泄漏”。 嘗試將其放在自己的范圍內,看看是否得到相同的結果。

只有釋放了已分配的所有內容,才能調用_CrtDumpMemoryLeaks

正如其他答案所述,你在范圍內有一個unordered_map ,這個對象已經分配了內存。 一旦它消失了,分配將隨之而來。 所以將它包裝在一個范圍內!

暫無
暫無

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

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