簡體   English   中英

c ++中的動態二維數組和內存泄漏

[英]Dynamic 2d array in c++ and memory leaks

我寫了這段代碼。 它運行正常,但是當我在Valgrind下檢查它時它會遇到2個問題。 既然我無法解釋valgrind的消息,我會很感激,如果有人解釋我更多,並告訴我問題在哪里!

這是代碼:

#include <iostream>

#define width  70000 
#define height 10000

using namespace std;

int main(void)
{
    int** pint; 

    pint = new int*[height];
    for(int i = 0; i < height; i++)
        pint[i] = new int[width];

    for(int i = 0; i < height; i++){
        delete[] pint[i];
        pint[i] = NULL;
    }

    delete[] pint;
    pint = NULL;


    return 1;
}

好吧,有一些Valgrind警告我得到3.4但只有第一個很重要。

new / new []失敗並且應該拋出異常,但Valgrind不能拋出異常,因此正在中止。 抱歉。

new在內存不足時拋出異常(除非你使用new的nothrow版本)。 不幸的是,Valgrind在代碼完成之前無法處理並放棄。 因為valgrind中止,所以從不執行代碼來釋放內存,這會顯示為內存泄漏。

也就是說,您沒有處理新拋出的情況,因此如果內存不足,您的程序將因未處理的異常而死亡。 您需要使用try / except塊包裝代碼。

在我看來,它正在抱怨一些new[]失敗了。 如果你減小height和/或width的大小,那么它工作正常。 你可能試圖分配太多內存。

編輯 :那是在我的32位盒子上。 如果我在我的64位盒子上運行它,那很好。 因此,您可能會在32位計算機上達到內存限制。

暫無
暫無

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

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