初始化2D阵列

时间:2010-05-07 02:13:44

标签: c multidimensional-array

好的,所以我有一个2D数组,用文件中的值初始化(格式:x y z) 我的文件正确读入值,但是当将z值添加到矩阵/ 2DArray时,我遇到了段错误,我不明白为什么。它可能是错误的指针使用?我还没有完全掌握它们。

这是我的初始化程序,工作正常,甚至将所有“z”值初始化为0。

int** make2DArray(int rows, int columns)
{
    int** newArray;
    newArray = (int**)malloc(rows*sizeof(int*));
    if (newArray == NULL)
    {
        printf("out of memory for newArray.\n");
    }
    for (int i = 0; i < rows; i++)
    {
        newArray[i] = (int*)malloc(columns*sizeof(int));
        if (newArray[i] == NULL)
        {
            printf("out of memory for newArray[%d].\n", i);
        }
    }

    //intialise all values to 0
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            newArray[i][j] = 0;
        }
    }

    return newArray;
}

这就是我调用初始化程序(和问题函数)的方法。

int** map = make2DArray(rows, columns);
fillMatrix(&map, mapFile);

这是问题代码。

void fillMatrix(int*** inMatrix, FILE* inFile)
{
    int x, y, z;
    char line[100];
    while(fgets(line, sizeof(line), inFile) != NULL)
 {
  sscanf(line, "%d %d %d", &x, &y, &z);
  *inMatrix[x][y] = z;
 }
}

从我通过使用ddd收集的内容来看,问题出现在y达到47时 地图文件的最大“x”值为47,最大“y”值为63,我很确定我没有把订单混淆,所以我不知道为什么这个程序是段错误的?我确定这是一个新手的错误...

1 个答案:

答案 0 :(得分:3)

下标的优先级高于取消引用运算符,因此需要一对括号:

(*inMatrix)[x][y] = z;

但是,根据您的使用案例,您可以直接将int**传递给fillMatrix;额外的间接是不必要的。