gpt4 book ai didi

c - 初始化二维数组

转载 作者:行者123 更新时间:2023-12-04 06:53:32 25 4
gpt4 key购买 nike

好的,所以我有一个 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 时问题就出现了。
map 文件的最大“x”值为 47,最大“y”值为 63,我很确定我没有混淆顺序,所以我不知道为什么程序会出现段错误?我确定这是一些新手错误......

最佳答案

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

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

但是,对于您的用例,您可以通过 int**直接到 fillMatrix ;额外的间接是不必要的。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com