在2D数组中分配值时出错

时间:2015-04-21 17:50:55

标签: c

double** Make2DDoubleArray(int arraySizeX, int arraySizeY) {
    double** theArray;
    theArray = (double**) malloc(arraySizeX*sizeof(double*));
    for (int i = 0; i < arraySizeX; i++)
    {
        theArray[i] = &(malloc(arraySizeY*sizeof(double)));
        memset(&(theArray[i]), 0, arraySizeY*sizeof(double));
    }
    return theArray;
} 

我需要用C中的malloc制作一个二维数组。我使用了上面的方法。

当我使用Matrix访问返回的数组(让我们称之为Matrix[1,2] = 2.0;)时会抛出错误:

  

无法在作业

中将'double'转换为'double *'

但我不明白为什么Matrix[1,2]是指针而不是值? Matrix是指针的指针,Matrix[i]是指向double列表的指针,因此Matrix[i,j]应该是double而不是double * 1}}!

2 个答案:

答案 0 :(得分:3)

Matrix[i, j]Matrix位于索引i, j的项目,它是值ij上的逗号运算符的结果,只是Matrix[j]。你的意思可能是Matrix[i][j]

除此之外:

  • 不要转换malloc的返回值:

    double** theArray = malloc(arraySizeX * sizeof(double));
    
  • 您使用的是错误的sizeof;它是sizeof(double*)

    double** theArray = malloc(arraySizeX * sizeof(double*));
    
  • 这没有任何意义;放下&

    theArray[i] = &(malloc(arraySizeY*sizeof(double)));
    
  • 这是错的;再次删除&

    memset(&(theArray[i]), 0, arraySizeY*sizeof(double));
    

答案 1 :(得分:2)

这些行错了:

theArray[i] = &(malloc(arraySizeY*sizeof(double)));
memset(&(theArray[i]), 0, arraySizeY*sizeof(double));

我很惊讶编译器没有抱怨在第一次通话中取一个临时地址。

你需要:

theArray[i] = malloc(arraySizeY*sizeof(double));
           // ^^ Drop the &
memset(theArray[i], 0, arraySizeY*sizeof(double));
    // ^^ Drop the &