【发布时间】:2016-05-28 02:44:57
【问题描述】:
我需要存储一个包含 4 个字段(数字、等级 1、等级 2 和平均)的 N 个学生的矩阵。这可以通过结构来实现,但这不是本练习的目的。一旦收集到数据(read_data),就必须按照平均值排序(sort_matrix)。但是,当插入超过 4 个或更多学生时,会发生分段错误。我一直无法检测到问题的根源。我错过了什么?
相关代码如下。
void read_data(float **mtx, int *size){
float num, grade1, grade2;
while( scanf("%f %f %f", &num, &grade1, &grade2)==3 ){
(*size)++;
mtx = (float**)realloc(mtx, (*size)*sizeof(float*) );
mtx[*size-1] = (float*)malloc(4*sizeof(float));
mtx[*size-1][0] = num;
mtx[*size-1][1] = grade1;
mtx[*size-1][2] = grade2;
mtx[*size-1][3] = (grade1+grade2)/2;
}
printf("Done reading\n");
}
void sort_matrix(float **mtx, int size){
int i=0, j=0;
float *aux = NULL;
for(i=0; i<size-1; i++){
for(j = 0; j<size-1-i; j++){
if(mtx[j][3] > mtx[j+1][3]){
aux = mtx[j];
mtx[j] = mtx[j+1];
mtx[j+1]=aux;
}
}
}
printf("Done sorting\n");
}
int main(void){
float **mtx =(float**)malloc(0);
int size=0;
read_data(mtx, &size);
sort_matrix(mtx, size);
print_matrix(mtx, size);
return 0;
}
编辑:按照下面给出的答案,我发现this topic 被证明是有用的。 问题原来是在不传递指针地址的情况下更改 mtx 的大小。对于排序函数,不需要传递地址,因为即使 mtx 数组指向的地址会改变,但大小不会。
【问题讨论】:
-
C 使用按值传递....
-
是的,这对我发布的内容有何影响?
-
read_data(mtx, &size); sort_matrix(mtx, size);....现在看吗?
标签: c sorting matrix segmentation-fault