有人可以帮助我找到导致分段错误(核心已转储)的错误吗?

时间:2018-06-23 06:17:01

标签: c arrays pointers segmentation-fault

注意:实际上,问题是以之字形方式打印矩阵的对角线 给定2D矩阵,以对角线顺序打印给定矩阵的所有元素。例如,考虑以下5 X 4输入矩阵。

 1     2     3     4  
 5     6     7     8  
 9    10    11    12  
13    14    15    16  
17    18    19    20 

上述矩阵的对角线打印是

1  
5   2  
9   6   3  
13  10  7   4  
17  14  11  8  
18  15  12  
19  16  
20  

现在我只是打印数组的下标

#include<stdio.h>
#include<stdlib.h>
int main(){
   int rows,cols,ind,inner,outer;
    scanf("%d %d",&rows,&cols);
   int **ptr=(int**)malloc(rows*sizeof(int*));
   for(ind=0;ind<rows;ind++)
          *(ptr+ind)=(int*)malloc(cols*sizeof(int));
for(outer=0;outer<cols;outer++){
         for(inner=0;inner<rows;inner++){
                  scanf("%d ",(*(ptr+outer)+inner));
            }
     }
inner=0,outer=0;
for(ind=1;ind<rows+cols;ind++){
     printf("%d",ind);
    while(*(*(ptr+outer)+inner)!=0)    {
            printf("%d %d",outer,inner);
               inner++;
            outer--;
            }printf("\n");
    }
    return 0;
}

也适用于没有malloc的数组

#include<stdio.h>
#include<stdlib.h>
int main(){
    int rows,cols,ind,inner,outer;
    scanf("%d %d",&rows,&cols);
    int arr[rows][cols];
    for(outer=0;outer<rows;outer++){
        for(inner=0;inner<cols;inner++){
            scanf("%d ",&arr[outer][inner]);
        }
    }
    inner=0,outer=0;
    for(ind=0;ind<rows;ind++){
    printf("%d",ind);
    while(arr[outer][inner]){
        //printf("%d %d",outer,inner);
        inner++;
        outer--;
        }
    printf("\n");
    outer=ind;
    inner=0;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,不需要强制转换malloc(),请阅读此Do I cast the result of malloc?

int **ptr=malloc(rows*sizeof(*ptr));
for(ind=0;ind<rows;ind++)
     *(ptr+ind)=malloc(cols*sizeof(**ptr));

当您为for而不是{{1}分配内存时,外部rows循环应旋转for次,内部cols循环应旋转ptr[rows][cols]次}}。

将其更改为

ptr[cols][rows]