好的,所以我有一个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,我很确定我没有把订单混淆,所以我不知道为什么这个程序是段错误的?我确定这是一个新手的错误...
答案 0 :(得分:3)
下标的优先级高于取消引用运算符,因此需要一对括号:
(*inMatrix)[x][y] = z;
但是,根据您的使用案例,您可以直接将int**
传递给fillMatrix
;额外的间接是不必要的。