在c ++中创建大尺寸2D数组时的分段错误

时间:2016-06-26 06:08:37

标签: c++

我在文件中使用C ++中的new()分配了一个大小为5000 x 4859的2D数组。

class input
{
public :
int **mytable;
int rows;
int columns;

input()
{
   rows=5008;
   columns=4859;


     std::ifstream file("test.txt");
     mytable=new int *[rows];

      for(int i=0;i<rows;i++)
      {
             mytable[i]=new int [columns];
      }

// read the input and inserted them into the array.
}
int ** gettable()
{
   return mytable;
}

然后在另一个通过指针使用mytable的函数中。

void someFunction()
{
int ** table;
input file;
table= file.gettable();

// doing neccessary operations.

}

当我将表的大小减小到500 x 500时,它工作正常,但对于大尺寸,它会产生std :: bad alloc错误。我哪里做错了?请帮忙。

2 个答案:

答案 0 :(得分:2)

这应该是有帮助的,Creating large arrays in c++。创建阵列时可以考虑的一些相关事项。 {虽然我可以运行并使用4000乘4000阵列(可能是因为系统配置),但40000乘40000失败。}

答案 1 :(得分:0)

您正在尝试分配太多内存。请查看bad_alloc

  

std :: bad_alloc是分配函数引发异常时抛出的对象类型,用于报告分配存储的失败。

显然,您超出了操作系统允许的内存限制。