0

test.bin のサイズは 7,01,760 バイトです。このファイルから日付をバッファ bufferPointer で「短い」として読み取ろうとしています。

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() で Debug Assertion Failed が発生しています。なんで?

MSVC2010、Windows-7-32 ビット

4

4 に答える 4

6

バッファに 350880 バイトを割り当てましたが、350880 ショートを読み込もうとしました。試す

bufferPointer = malloc(350880 * sizeof *bufferPointer);

(malloc をキャストする必要はなく、バグを隠す可能性があるため、眉をひそめられることに注意してください。)

また、malloc、fopen、および fread 呼び出しのエラーもチェックする必要があります。

于 2012-11-13T05:44:43.187 に答える
2

bufferPointerまず、を使用して に十分な量のメモリを割り当てる必要がありますmalloc。次にfread、ファイルからそのバッファーに読み取るために使用できます。

于 2012-11-13T05:37:58.710 に答える
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);
于 2012-11-13T05:44:14.327 に答える
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によって書かれたものを読み取りますfwritefwriteつまり、書き込みshortsを使用して作成されたファイルでしたか? そうでなければ、あなたが読んだものは意味をなさないかもしれません。

于 2012-11-13T05:47:09.217 に答える