2012-11-13 99 views
0

test.bin的大小爲7,017,700字節。我試圖從緩衝區bufferPointer中將這個文件的日期讀作「short」。調試斷言在fread()失敗()

short * bufferPointer=NULL; 
// ==> ANSWER WAS ADDING: bufferPointer = (short*)malloc(350880); <== 
FILE *fp=fopen(" test.bin","rb"); 
fread(bufferPointer,sizeof(short),350880 ,fp); 
fclose(fp); 

我得到調試斷言在fread()失敗。爲什麼?

MSVC2010,Windows的7-32位

回答

2

您應先用malloc分配內存的bufferPointer足夠量。然後,您可以使用fread從文件讀入該緩衝區。

1

sgar91是正確的。請嘗試:

short * bufferPointer = (short *)malloc(350880*sizeof(short)); 
if (bufferPointer == NULL) 
{ 
    // TODO: error handling 
} 

FILE *fp = fopen("test.bin", "rb"); 
if (fp == NULL) 
{ 
    // TODO: error handling 
} 

fread(bufferPointer, sizeof(short), 350880, fp); 
fclose(fp); 
6

您爲緩衝區分配了350880個字節,但嘗試讀取350880個短消息。嘗試

bufferPointer = malloc(350880 * sizeof *bufferPointer); 

(需要注意的是鑄造的malloc是沒有必要的,並且在,因爲它可以隱藏的錯誤是皺起了眉頭。)

您也應該檢查你的malloc,FOPEN,FREAD和要求的錯誤。

1

試試這個

short bufferPointer[350880]; 
FILE *fp=fopen("test.bin","rb"); 
fread(bufferPointer,sizeof(short),350880 ,fp); 
fclose(fp); 

此列舉幾個

1東西)你不能這樣直接使用指針。靜態分配上面的內存或使用malloc動態分配

2)在字符串「test.bin」的開頭有一個空格。刪除領先空間。

3)即使上述工作,它可能不會給你有意義的結果。 fread讀取已由fwrite寫入的內容。即使用fwrite寫作short s創建的文件?如果不是,你讀的內容可能沒有意義。

+0

不應該分配內存嗎? –