本地定义的Double数组使程序崩溃

时间:2016-09-28 00:23:06

标签: c++ arrays crash

我在C ++的类的函数成员中本地定义了以下变量:

    double coeff, mincoeff, minratio,
           equality[100][5000],
           tableau[51][5052],
           x[50][100];

运行程序时崩溃。当我注释掉equality数组时,它可以工作,但是如果我不注释它,它会使程序崩溃。 tableau数组不是这样,它总是与'tableau'数组一起使用,没有'equality'数组。我看到一篇帖子使用malloc()函数动态分配空间,如:

double *equality; equality = malloc(500000*sizeof(double));

但是它给了我一个错误,即从void*double*没有转换。还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

在堆上分配eqaulity,当你完成它的空闲内存时:

int main()
{

    double** equality = new double* [100];
    for(int i(0); i < 100; i++)
        equality[i] = new double[5000];

    for(int i = 0; i < 100; i++)
        delete[] equality[i];
    delete[] equality;

    equality = NULL;


    std::cout << std::endl;
    return 0;
}

答案 1 :(得分:1)

就像@ user657267提到的那样,你要求4MB的连续内存块用于平等。这里最好的办法是动态地询问内存。

double **equality = new (nothrow) double*[100]; //Or do exception check to make sure you have enough memory
if (equality!=nullptr)
{
  for(int i(0); i < 100; i++) 
  {
    equality[i] = new (nothrow) double[5000]; //Again or do exception check to handle exception if it cannot get asked memory.
    if (equality[i] == nullptr)
    {
      //Handle the situation where memory could not be allocated
      ...
    }
  }
}
else
{
  //Handle not being able to allocate memory
}

关于c风格的malloc(也适用于C ++),你必须转换为正确的数据类型,如下所示:

double *equality;
equality = (double*) malloc(500000*sizeof(double));

注意:不要忘记释放已分配的内容。