【发布时间】:2014-12-20 10:37:56
【问题描述】:
我想扫描输入并将其保存在一个正方形二维数组中。
前两位保存在单独的变量中,第一位是目标数字(此处无关),第二位保存在变量m中,即m = 5 在这种情况下。 m 是方阵的行数/列数。输入的其余部分应保存在数组中。 对于这个特定的输入,我得到一个分段错误,随机数被打印在屏幕上。 我使用一些 printf 语句来跟踪哪里出了问题,我注意到第一个循环中的索引 i 在一个场景中从 2 跳到 11,对于其他输入它跳到 33。 谢谢你的帮助!我希望我没有遗漏一个明显的错误。
输入:(每行通过按回车键分隔。)
42 5
0 3 7 9 10
9 13 20 5 20
12 11 33 0 12
17 39 22 3 18
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* arv[]){
int target; // for later processing, irrelevant here
int m; // m = #rows and #columns of array
int array[m][m];
scanf("%d %d", &target, &m);
int i, k;
for(i = 0; i < m; i++){
for(k = 0; k < m; k++){
scanf("%d", &(array[i][k])); // save value in array.
}
}
// the problem occurs before this point.
for(i = 0; i < m; i++){
for(k = 0; k < m; k++){
printf("%2d", array[i][k]); // print array.
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
在
m具有有意义的值之前,您声明了可变长度数组m。将该声明放在第一个scanf之后。 -
@MOehm 我不敢相信我只花了两个小时试图找出问题所在并错过了这一点。非常感谢!
-
嗯,众所周知的新鲜眼睛......
标签: c arrays segmentation-fault scanf multidimensional-array