显示数组时c中的Segmentaion故障

时间:2016-06-07 17:11:13

标签: c arrays

我必须采取' 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

有什么问题?

1 个答案:

答案 0 :(得分:1)

您的代码不会检查数组边界。在继续操作之前,您需要检查mn是否小于182。在读取pixel数组时,您还应该使用一种防止缓冲区溢出的方法 - 例如fgets(pixel, sizeof(pixel), stdin)。否则,根据mn上的值,您可能会因缓冲区溢出而产生不可预测的结果。

您的示例也没有显示dis数组的定义,但您也需要在那里进行边界检查。

除此之外,我猜你的输入并不像你的程序所期望的那样。一旦失败就执行数组边界检查和断言将帮助您更快地找到差异。