簡體   English   中英

如何使用此malloc語句分配內存?

[英]How to allocate memory using this malloc statement?

我有這種讀取文件的方法。 更具體的矩陣,其中前兩個數字是行和列。 但是,當我嘗試使用malloc並使用行和列分配內存時,應用程序崩潰。

我正在使用的代碼是這樣的:

#include stdio.h
#include stdlib.h
#include 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("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 program 
printf("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 memoria
printf("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;

}

謝謝!

您的問題是您這樣做:

...
fscanf(fp,"%d",&renglones);
...
fscanf(fp,"%d",&columnas);
...

結果,這兩個數字(從文件中讀取)成為指向renglonescolumnas指針,您可以進一步取消引用以計算malloc的大小。 例如,如果您讀取數字1632 ,則renglones指向0x00000010columnas指向0x00000020 但是,這些內存單元顯然包含隨機垃圾(從您的任務的角度來看),即它們可能包含任意大的數字,這些數字相乘會得到更大的數字,而malloc根本無法分配那么多的內存,最終導致在崩潰中。

相反,它應該是:

...
fscanf(fp,"%d",renglones);
...
fscanf(fp,"%d",columnas);
...

因為renglonescolumnas已經都是指針。 這樣,您就可以真正填充renglonescolumnas指向的兩個int變量,並獲得預期的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM