sep*_*oad 2 c++ arrays valgrind 2d dynamic
我写了这段代码.它运行正常,但是当我在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;
}
Run Code Online (Sandbox Code Playgroud)
好吧,有一些Valgrind警告我得到3.4但只有第一个很重要.
new/new []失败并且应该抛出异常,但Valgrind不能抛出异常,因此正在中止.抱歉.
new当内存不足时抛出异常(除非你使用new的nothrow版本).不幸的是,Valgrind在代码完成之前无法处理并放弃.因为valgrind中止,所以从不执行代码来释放内存,这会显示为内存泄漏.
也就是说,您没有处理新抛出的情况,因此如果内存不足,您的程序将因未处理的异常而死亡.您需要使用try/except块包装代码.
在我看来,它抱怨说有些new[]人失败了.如果你减小height和/或的大小width,那么它工作正常.你可能试图分配太多内存.
编辑:那是在我的32位盒子上.如果我在我的64位盒子上运行它,那很好.因此,您可能会在32位计算机上达到内存限制.
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |