我在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*
没有转换。还有另一种方式吗?
答案 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));
注意:不要忘记释放已分配的内容。