C在函数中传递2d数组给了我分段错误

C在函数中传递2d数组给了我分段错误,c,arrays,function,malloc,C,Arrays,Function,Malloc,我是一名初级程序员,目前正在学习C。我试图从用户那里读取数组的维数,使用malloc创建数组,然后将创建的数组传递到函数中,函数应该找到数组中每行的最小数目,并将其放入另一个数组中,该数组也将返回主程序。然而,一旦数组被传递到函数中并且我尝试使用它,我就会得到一个分段错误(内核转储)错误。我知道错误在哪一行,但我找不到我犯的错误。如果你们能帮我一点忙,我会非常感激的。代码如下: #include <stdio.h> #include <stdlib.h> int *pi

我是一名初级程序员,目前正在学习C。我试图从用户那里读取数组的维数,使用malloc创建数组,然后将创建的数组传递到函数中,函数应该找到数组中每行的最小数目,并将其放入另一个数组中,该数组也将返回主程序。然而,一旦数组被传递到函数中并且我尝试使用它,我就会得到一个分段错误(内核转储)错误。我知道错误在哪一行,但我找不到我犯的错误。如果你们能帮我一点忙,我会非常感激的。代码如下:

#include <stdio.h>
#include <stdlib.h>

int *pinfun(int **pin,int sizex,int sizey);

void main(void){
    int x,y,i,j;
    int **dipin;
    int *newpin;
    printf("Parakalw eisagetai tis diastaseis x,y tou pinaka:");
    scanf("%d %d",&x,&y);
    dipin =(int**) malloc(x*sizeof(int*));
        for(i=0;i<x;i++){
                *(dipin+i)=(int*) malloc(y*sizeof(int));
        }
        for(i=0;i<x;i++){
                for(j=0;j<y;j++){
                        printf("Parakalw eisagetai tin (%d,%d) timi tou pinaka:",i,j);
                        scanf("%d",((dipin+i)+j));
                }
        }
    newpin= pinfun(dipin,x,y);
    for(i=0;i<x;i++){
        printf("H elaxisti timi tis %dis grammis einai: %d",i,*pinfun);
    }
}

int *pinfun(int **pin,int sizex,int sizey){
    int i,j,min;
        int* retpin=malloc(sizeof(int)*sizex);
        for(i=0;i<sizex;i++){
                min=**pin;
                for(j=0;j<sizey;i++){
                        if(*(*(pin+i)+j) < min){
                            min =*(*(pin+i)+j);
                        }
                }
        *(retpin + i) = min;
        }
    return retpin;
}
#包括
#包括
int*pinfun(int**pin,int-sizex,int-sizey);
真空总管(真空){
int x,y,i,j;
int**dipin;
int*newpin;
printf(“Parakalw eisagetai tis diastaseis x,y tou pinaka:”);
scanf(“%d%d”,&x,&y);
dipin=(int**)malloc(x*sizeof(int*);
对于(i=0;i
按照酷哥的建议修复printf()

printf("H elaxisti timi tis %dis grammis einai: %d",i,newpin[i]);
改变


为了便于理解,代码已修复。错误在于:

scanf("%d",((dipin+i)+j));
切换到:

scanf("%d", (*(dipin+i)+j)) 
它很有魅力。谢谢你抽出时间

for(j=0;j<sizey;i++)

当然,也有一些其他的打字错误被提到,但这就是造成分段错误的原因。

首先,学习使用[]运算符,然后只发布一个小例子。@2501如果我不知道尺寸,我怎么能使用[]运算符?如果这个问题听起来很愚蠢,我很抱歉,我还是一个初学者。
*(*(pin+I)+j)
pin[i][j]相同
scanf看起来可疑
((dipin+i)+j)
是一个双指针。但无论如何,我建议使用调试器。(gdb?)谢谢大家。看来导致问题的错误出现在“scanf”(%d),((dipin+i)+j)中。”行。代码现在已修复。我使用指针的原因是为了更好地理解指针的整个概念。我知道[]更容易阅读和理解。再次感谢您的时间。是的,您是对的,这是一个错误,我修复了它,但它仍然给我分割错误。:/Yeap,这些都是错误的,我已经修复了,但错误仍然存在…:/
for(j=0;j<sizey;i++)
for(j=0;j<sizey;j++)
printf("H elaxisti timi tis %dis grammis einai: %d",i,*pinfun);
printf("H elaxisti timi tis %dis grammis einai: %d",i,*(newpin+i));
printf("H elaxisti timi tis %dis grammis einai: %d",i,newpin[i]);
scanf("%d",((dipin+i)+j));
scanf("%d", (*(dipin+i)+j))