当我尝试动态分配像
这样的矩阵时array = new double *[genome_size];
for(int i=0; i<genome_size; i++)
array[i] = new double[max_size]();
没有问题,而且一切都很好,直到我尝试创建一个像
这样的工作void createArray(double **array, int max_size, int genome_size)
{
array = new double *[genome_size];
for(int i=0; i<genome_size; i++)
array[i] = new double[max_size]();
}
并使用函数
double **avgWing1;
createArray(avgWing1, max_size, genome_size);
我遇到了运行时错误。我很好奇为什么?
任何想法都赞赏。
答案 0 :(得分:3)
问题是如何传递参数。调用该方法后,avgWing1
的值未更改。您需要返回它或将参数作为参考传递:
void createArray(double ** &array, int max_size, int genome_size)
// ^ here
答案 1 :(得分:2)
我认为问题是你需要将指针传递给你的指针。:)作为
的东西void createArray(double ***array, int max_size, int genome_size)
{
*array = new double *[genome_size];
for(int i=0; i<genome_size; i++)
( *array )[i] = new double[max_size]();
}
double **avgWing1;
createArray( &avgWing1, max_size, genome_size);
答案 2 :(得分:2)
createArray函数本身的指针avgWing1
是一个变量,它作为参数double** array
传递给createArray函数,但按值传递 ......
这意味着,在createArray
内double** array
只是一个局部变量,它将被设置为avgWing1
的值,并且只存在于函数内部。您将分配double *数组并将指针存储到局部变量中,但是一旦您离开该函数,该值将丢失,您将无法确定在何处分配所有内容。 avgWing1
将保留之前的值。
最简单的解决方案是从createArray返回指针:
double** createArray(int max_size, int genome_size)
{
double** array = new double *[genome_size];
for(int i=0; i<genome_size; i++)
array[i] = new double[max_size]();
return array;
}
用法:
double **avgWing1 = createArray(max_size, genome_size);