我是一名初级程序员,目前正在学习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((,它就像一个魅力。谢谢你的时间。
代码已修复。错误在于:
scanf("%d",((dipin+i)+j));
通过将其切换到:
scanf("%d", (*(dipin+i)+j))
它就像一个魅力。谢谢你的时间。
当然,也提到了其他一些拼写错误,但这就是导致分割错误的原因。
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]);
更改
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]);
使其更容易理解