の診断メッセージはありません。? Cコンパイラからの警告はすべて重要な意味でですが、通常は重大なエラーの兆候です!また、スタックオーバーフローについて尋ねるときは、コンパイラから何らかの診断を逐語的に質問にコピーしてください。
問題はここにある:
fwrite(fin_val, sizeof(fin_val), 1, file);
fwrite
のプロトタイプが
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ある最初の引数がのconst voidへのポインタでなければならない、まだあなたはuint16_t
に渡します。 &fin_val
である必要があります。したがって、fwrite
がその変数にアドレスを取得します。
関連するノートでは、fclose;
は関数呼び出しではありません。また、これは正常なコンパイラで診断メッセージを生成したはずです。 fclose(file);
である必要があります。
は、ここで警告なしでGCCからの出力例です:有効になっているすべての警告と
% gcc -c pcm.c
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
、ここで:
% gcc -c pcm.c -Wall
pcm.c: In function ‘write2PCM’:
pcm.c:10:12: warning: passing argument 1 of ‘fwrite’ makes pointer from integer without a
cast [-Wint-conversion]
fwrite(fin_val,sizeof(fin_val),1,file);
^~~~~~~
In file included from pcm.c:1:0:
/usr/include/stdio.h:717:15: note: expected ‘const void * restrict’ but argument is of
type ‘uint16 {aka short unsigned int}’
extern size_t fwrite (const void *__restrict __ptr, size_t __size,
^~~~~~
pcm.c:13:1: warning: statement with no effect [-Wunused-value]
fclose;}
^~~~~~
私はvs2017を使用しています。エラーメッセージが表示されます。ロケーション0xを読み取っているときにアクセス違反が発生しました....、gcc @ _ @! –
@马慧超*のコンパイル中は、プログラムの実行中ではありません。 –
@马慧超これらのコンパイラ診断がどこに出力され、それらを注意深く読んでいるかを見つけることが絶対に必要です。そうしないと、動作中のCプログラムをプログラムすることはありません! :D –