尝试将动态数组分配为函数时的运行时错误

时间:2013-11-14 21:59:22

标签: c++ qt

当我尝试动态分配像

这样的矩阵时
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);

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

任何想法都赞赏。

3 个答案:

答案 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函数,但按值传递 ......

这意味着,在createArraydouble** 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);