C ++大型2D数组(在堆上)使应用程序崩溃

时间:2017-12-01 00:18:21

标签: c++ arrays

所以基本上我试图创建一个大的2D数组([66049] [66049])浮点数,但由于某种原因应用程序崩溃,因为它在堆上分配内存。以下是我如何分配它:

float **heights;
heights = new float*[numVertices];
for (int i = 0; i < numVertices; i++)
    {
        heights[i] = new float[numVertices];
    }

我尝试在for循环中添加i的打印以检查它何时崩溃,当它崩溃时我大约是7200(并不总是相同的数字)。

我可以使用太多内存吗?如果是这样,我怎么能在没有应用程序崩溃的情况下做到这一点。

感谢。

2 个答案:

答案 0 :(得分:0)

看起来你的内存太多了。 因此,如果运算符new由于某些原因无法分配内存(例如,它没有足够的可用内存),则会抛出异常std::bad_alloc。 使用try-catch块来检测抛出的异常,如下所示:

try{
   float **heights;
   heights = new float*[numVertices];
   for (int i = 0; i < numVertices; i++){
      heights[i] = new float[numVertices];
   }
}
catch(std::exception exc){ std::cout << exc.what() << std::endl; }
system("pause");

另外,请阅读一些有关std::bad_allocoperator new

的文章

答案 1 :(得分:0)

看起来我使用了太多的内存,太多了。我最后只需要[257] [257],而不是[257 * 257] [257 * 257],所以这是我的坏事。