[英]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.