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