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

时间:2014-12-18 16:01:41

标签: c arrays function malloc

我是初学程序员,我正在学习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;
}

代码已修复。错误在于scanf(“%d”,((dipin + i)+ j));线。通过将其切换为scanf(“%d”,(*(dipin + i)+ j)),它就像一个魅力。谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

代码已修复。错误在于:

scanf("%d",((dipin+i)+j));

将其切换为:

scanf("%d", (*(dipin+i)+j)) 

它就像一个魅力。谢谢你的时间。

当然还有一些其他提到的错别字,但这就是引起分段错误的原因。

答案 1 :(得分:1)

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

我没有完成整个代码,但这看起来很可疑

它应该是

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

最好让你的代码像。

一样

使用

pin[i] = *(p+i);

pin[i][j] = *(*(pin+i)+j);

按照Cool Guy的建议修复你的printf()。

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

答案 2 :(得分:0)

更改

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]);

让它更容易理解