我写了这段代码。它运行正常,但是当我在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;
}

最佳答案

好的,我在3.4中收到了几个Valgrind警告,但只有第一个很重要。


new在内存不足时会引发异常(除非您使用new的nothrow版本)。不幸的是,Valgrind无法处理该问题,因此在您的代码完成之前就放弃了。由于valgrind中止,因此您将永远不会执行释放内存的代码,这会显示为内存泄漏。

就是说,您没有处理新的抛出的情况,因此如果内存不足,程序将由于未处理的异常而死亡。您需要使用try / except块包装代码。

09-08 04:40