※ ChatGPTを利用し、要約された質問です(原文:fread時の0xc0000005エラーについて)
0xc0000005エラーによる質問記事
このQ&Aのポイント
Win32APIのGetOpenFileName()を使用して音声ファイル(wav形式)を選択し、情報を取り出すプログラムで、freadの部分で0xc0000005エラーが発生しています。
関数の引数やファイルのオープン処理が正しく行われているようですが、エラーが解消されません。
Windows 7 64bitとVisual Studio 2013 professionalの環境で作業しています。何か指摘や解決策があれば教えてください。
現在、win32APIのGetOpenFileName()を利用して、音声ファイル(wav形式)を選択し、その選択した音声ファイルの情報を取り出すことを考えています。
プログラム自体が長いのですべて載せることが出来ないのですが、関連する部分だけピックアップすると、
main.c内で
static OPENFILENAME ofn = { 0 };
static TCHAR strFile[MAX_PATH];
//ダイアログボックスが生成されたら
case WM_INITDIALOG:
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = TEXT("WAVファイル(*.wav)\0*.wav\0");
ofn.lpstrFile = strFile;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_FILEMUSTEXIST;
// ファイル選択ボタンが押されたら
case IDC_FILE_SELECT:
//ファイルを開くダイアログを表示しwavファイルを選択
GetOpenFileName(&ofn);
//選択されたファイル名(フルパス)を引数として関数に渡す
if(road_wav(strFile) == FALSE)
//エラー処理
------------------
上記の関数road_wav()は別ファイル(road_wav_file.c)で記述し、
BOOL road_wav(const char *filename){
FILE* wfp;
char reafword[4];
if(fopen_s(&wfp, filename, "rb") != 0){
//エラー処理
return FALSE;
}
else{
//fopen_s成功
}
//ここでエラー(0xc0000005)
fread(reafword, 4, 1, &wfp);
return TRUE;
}
------------------
というように、freadの部分で0xc0000005エラーが出てしまいます。
wfpのポインタがエラーの原因かと考え、関数の引数(=選択した音声ファイル名)が間違っている、もしくは、fopen_sで正しく音声ファイルが開けていないかと思い調べてみたのですが、
strFileには選択したファイル名がフルパスで正しく格納されており、f_opensもelse側に行っている(成功している)ようなので、wfpが原因では無いようです。
しかし、他に思い当たる原因が特に無く、どの部分を直せばよいかが分からず困っております。
もし何か分かりましたら教えていただけると助かります。
説明が非常に分かりにくくなってしまい申し訳ありませんが、よろしくお願いいたします。
作業環境
Windows7 64bit
Visual Studio 2013 professional
お礼
回答ありがとうございました。 freadの第4引数に&が不要でしたね。 警告には出ていたのですが、ビルドが通っていたので全く確認しておりませんでした・・・。 今後は警告も十分確認するように気を付けます。