我必须采取' n'字符数组(大小为m),只有数字,我必须将数字放在2-d整数数组中。 我在第二次显示整数数组时遇到分段错误。
int t,m,n,i,j,pix[182][182];
char ch,pixel[183];
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&m); //take n and m
for(i=0;i<n;i++){
printf("\n");
scanf("%s",pixel); //take character array
for(j=0;j<m;j++){
pix[i][j]=pixel[j]-48; //put numbers in integer array
dis[i][j]=0;
printf("%d ",pix[i][j]); //no error here
}
}
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<m;j++)
printf("%d",pix[i][j]); //segmentation fault after n-1 lines are displayed
有什么问题?
答案 0 :(得分:1)
您的代码不会检查数组边界。在继续操作之前,您需要检查m
和n
是否小于182。在读取pixel
数组时,您还应该使用一种防止缓冲区溢出的方法 - 例如fgets(pixel, sizeof(pixel), stdin)
。否则,根据m
和n
上的值,您可能会因缓冲区溢出而产生不可预测的结果。
您的示例也没有显示dis
数组的定义,但您也需要在那里进行边界检查。
除此之外,我猜你的输入并不像你的程序所期望的那样。一旦失败就执行数组边界检查和断言将帮助您更快地找到差异。