C++ 本地定义的双数组使程序崩溃

C++ 本地定义的双数组使程序崩溃,c++,arrays,crash,C++,Arrays,Crash,我在C++类的函数成员中本地定义了以下变量: double coeff, mincoeff, minratio, equality[100][5000], tableau[51][5052], x[50][100]; 运行程序时会崩溃。当我注释掉equalityarray时,它可以工作,但是如果我不注释掉它,它会使程序崩溃。这对于tableauarray是不正确的,它总是使用“tableau”数组,而不使用“equali

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

    double coeff, mincoeff, minratio,
           equality[100][5000],
           tableau[51][5052],
           x[50][100];
运行程序时会崩溃。当我注释掉
equality
array时,它可以工作,但是如果我不注释掉它,它会使程序崩溃。这对于
tableau
array是不正确的,它总是使用“tableau”数组,而不使用“equality”数组。我看到一篇帖子,它使用
malloc()
函数动态分配空间,如下所示:

double*相等;
相等=malloc(500000*sizeof(双倍))


但是它给了我一个错误,没有从
void*
转换到
double*
。还有其他方法吗?

在堆上分配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;
}
intmain()
{
双**相等=新双*[100];
for(int i(0);i<100;i++)
相等[i]=新的双精度[5000];
对于(int i=0;i<100;i++)
删除[]相等[i];
删除[]平等;
相等=空;

std::cout就像@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
}

注意:不要忘记释放您分配的资源。

程序崩溃时出现的错误消息是什么?它应该会告诉您出了什么问题。是的,还有另一种方法:
std::vector
(100*5000+51*5052+50*100)*sizeof(双精度)==你的堆栈的糟糕时刻
@MrEricSir它实际上是一个网络模拟器OMNet++的编程环境。我认为它使用了Eclips软件。我没有说什么特别的。只是说程序完成了,有错误。我肯定它来自这个变量声明,因为所有其他内容都被注释掉了。@user657267给出了一个很好的提示。Mo明确地说,需要50万个8字节双倍的4兆堆栈空间是您的问题。它太大了。关于使用堆内存的帖子(malloc建议)是正确的,或者至少是合理的。您可能想使用“new double[双倍数]”,以后不要忘了删除[]结果。
double *equality;
equality = (double*) malloc(500000*sizeof(double));