繁体   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