c中简单2d数组的意外输出



这是正在编写的程序的初始化部分。我是c的新手,对我得到的一个输出很困惑。如有任何建议,将不胜感激

对于输入911,我得到

1 2 3 4 5 6 7 8 9
9 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

我希望什么时候得到

1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
void *safeMalloc(int n) {
void *p = malloc(n);
if (p == NULL) {
printf("Error: malloc(%d) failed. Out of memory?n", n);
exit(EXIT_FAILURE);
}
return p;
}
int **makeIntArray2D(int width, int height) {
int **arr = safeMalloc(height*sizeof(int *));
for (int row=0; row < height; row++) {
arr[row] = safeMalloc(width*sizeof(int));
}
return arr;
}
int main(int argc, char *argv[]) {
int numDisks;
int numMoves;
scanf("%d %d", &numDisks, &numMoves);
int **tohan = makeIntArray2D(3, numDisks);
for(int i = 0; i < 3; i++) {
for(int j =0; j < numDisks; j++) {
tohan[i][j] = 0;
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < numDisks; j++) {
printf("%d ", tohan[i][j]);
}
printf("n");
}
printf("n");
for(int k = 0; k < numDisks; k++) {
tohan[0][k] = k+1;
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < numDisks; j++) {
printf("%d ", tohan[i][j]);
}
printf("n");
}
printf("n");
}

您有:

int **makeIntArray2D(int width, int height) { … }

您呼叫:

int **tohan = makeIntArray2D(3, numDisks);

您希望数组的高度为3,宽度为9,但您以错误的顺序为函数传递参数。

注意:如果没有看到makeIntArray2D()的代码,就无法进行此诊断

最新更新