1

当我尝试动态分配一个矩阵时

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);

我遇到了运行时错误。我很好奇为什么?

任何想法表示赞赏。

4

3 回答 3

3

问题是你如何传递参数。调用该方法后, 的值avgWing1没有改变。您需要返回它或将参数作为参考传递:

void createArray(double ** &array,  int max_size,  int genome_size)
//                         ^ here
于 2013-11-14T22:03:17.070 回答
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);
于 2013-11-14T22:03:39.273 回答
2

createArray 函数本身中的指针avgWing1是一个变量,它作为参数传递给 createArray 函数,double** array按值传递......

这意味着,内部createArray只是double** array一个局部变量,将被设置为 value ofavgWing1并且仅存在于函数内部。您将分配 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);
于 2013-11-14T22:10:52.617 回答