我有一个读取文件的方法。一个更具体的矩阵,前两个数字是行和列。但是,当我尝试使用malloc和行和列分配内存时,应用程序会崩溃。我使用的代码是:#include stdio.h#include stdlib.h#include stdlib.hfloat * readFile(char* nombre, int*renglones, int*columnas){FILE *fp;fp=fopen(nombre,"r");fscanf(fp,"%d",&renglones);printf("el numero de renglones es %d\n",renglones);fscanf(fp,"%d",&columnas);printf("number of rows %d\n",columnas);float value;fscanf(fp,"%f",&value);printf("el numero de columnas es %f\n",value);fscanf(fp,"%f",&value);printf("el numero de columnas es %f\n",value);printf("no llegue a malloc");float * res = malloc(*renglones**columnas*sizeof(float)); //memory reservation and the line that breaks the programprintf("after malloc");fclose(fp);return 0;}我知道包括在最后的代码是这个包含:stdio.h和stdlib.h的代码 float * readFile(char* nombre, int*renglones, int*columnas){FILE *fp;fp=fopen(nombre,"r");fscanf(fp,"%d",renglones);printf("el numero de renglones es %d\n",renglones);fscanf(fp,"%d",columnas);printf("el numero de columnas es %d\n",columnas);float value;float * res = (float*)malloc(*renglones**columnas*sizeof(float)); //Reserva de memoriaprintf("llegue a malloc\n");int i;for(i=0;i<*renglones**columnas;i++){ fscanf(fp, "%f",&value); res[i]=value; printf("dato %f\n",value);}printf("%d",i);fclose(fp);return res;}谢谢! (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 你的问题是:...fscanf(fp,"%d",&renglones);...fscanf(fp,"%d",&columnas);...结果,这两个数字(您从文件中读取的)成为renglones和columnas的指针,您可以进一步取消对它们的引用以计算malloc的大小。例如,如果您读取数字16和32,则renglones指向0x00000010并且columnas指向0x00000020。然而,这些内存单元显然包含随机垃圾(从您的任务的角度来看),即它们可能包含任意大的数字,这些数字相乘后会得到更大的数字,malloc根本无法分配那么多内存,最终导致崩溃。相反,它应该是:...fscanf(fp,"%d",renglones);...fscanf(fp,"%d",columnas);...因为renglones和columnas都是指针。这样,您将真正填充int和renglones指向的两个columnas变量,并获得预期的行为。 (adsbygoogle = window.adsbygoogle || []).push({}); 10-08 01:16