问题描述
我对该程序有问题,该程序必须简单地输出矩阵中包含的最小值,这必须通过将参数double指针(** A)作为数组的函数来完成,问题在于,在插入项目之后,程序将完成并且不返回任何内容。
(我什至没有出现书面的outuput指令)
#include<stdio.h>
#include<stdlib.h>
int minium_matrix_value(int **A,int rows,int columns) {
int min=A[0][0];
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++)
if(A[i][j]<min)
min=A[i][j];
}
return min;
}
int main(){
int** A;
int i,j;
int result;
int sizer=100,sizec=100;
A = (int**)calloc(sizer,sizeof(int*));
A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
printf("insert matrix elements");
for( i=0; i < sizer; i++ )
for( j=0; j < sizec; j++ ) {
scanf("%d",((A+i)+j));
}
result=minium_matrix_value(A,sizer,sizec);
printf("the minium elements is: %d",result);
return 0;
}
解决方法
- 您仅分配了数组来存储指向行的指针。您必须分配用于存储每行值的数组。
- 使用
sizer
的值应在将值读入该值之后
// move this after scanf()
// A = (int**)calloc(sizer,sizeof(int*));
// remove this,or memory leak occur
// A = (int**)calloc(sizec,sizeof(int*));
printf("insert rows size");
scanf("%d",&sizer);
printf("insert columns size");
scanf("%d",&sizec);
// move here
A = calloc(sizer,sizeof(int*));
printf("insert matrix elements");
for( i=0; i < sizer; i++ ) { // add { to do multiple things
A[i] = calloc(sizec,sizeof(int)); // allocate row array
for( j=0; j < sizec; j++ ) {
//scanf("%d",((A+i)+j));
scanf("%d",&A[i][j]); // use array style,which should be easier to understand
}
} // add } to do multiple things
还请注意:
-
scanf("%d",((A+i)+j));
是错误的,如果您讨厌scanf("%d",(*(A+i)+j));
运算符,则应该为[]
。 - 在C中,
malloc()
系列的铸造结果为discouraged。