c - 初始化二维数组

标签 c multidimensional-array

好的,我有一个用文件中的值初始化的二维数组(格式: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,我很确定我没有混淆顺序,所以我不知道为什么程序会出现段错误?我确信这是新手的错误...

最佳答案

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

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

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

关于c - 初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785759/

相关文章:

c++ - 在结构内部定义时初始化 Boost.MultiArray?

java - 从文本文件创建二维数组并查找平均值

c# - 将 List<double[]> 转换为 double[,]

C 从实时文件中读取(文件大小不断增加)

c - 将字符串文字分配给数组时出错

c - 如何使用 fscanf 在 C 中扫描文件

c - 指针,内存分配 : index of rows in Matrix Multiplication (C Programming)

c - 为什么在将 calloc 与 unsigned int 一起使用时 coverity 会提示

c++ - 在 C++ 中通过引用传递二维动态字符串数组

java - 二维数组的 OutOfBounds 异常