###前提・実現したいこと
wavファイルをDirectXで再生しようとしています。こちらで用意した素材をロードする関数を書き、ビルドを行うとビルドは通るのですが実行するとその関数内で以下のエラーメッセージが表示されました。
###発生している問題・エラーメッセージ
エラーメッセージ
Run-Time Check Failure #2 - Stack around the variable'pcm' was corrupted.
###該当のソースコード
LPDIRECTSOUNDBUFFER8 buffer = NULL;
DSBUFFERDESC buff;
HMMIO hMmio = NULL;
WAVEFORMA pcm;
...
hMmio = mmioOpen((LPSTR)bgmFileName[no],&mmioInfo,MMIO_READ);
if(!hMmio) return NULL;
...
size = mmioRead(hMmio(HPSTR)&pcm,formatChunk.cksize);
...
buff.lpwfxFormat = &pcm;
if(FAILED(baseBuffer->QueryInterface(IID_IDirectSoundBuffer8,(LPVOID*)&buffer)))
return NULL;
...
###試したこと
ブレークポイントで調べてみたところ、上のソースコードの最後の方のif文に引っかかってNULLを返しているようでした。また、pcmの値を調べてみたところ、
wFormatTag:85
nChannels:2
nSamplePerSec:44100
nAvgBytesPerSec:16000
nBlockAlign:1
wBitsPerSample:0
cbSize:12
でした。MSDNによるとnChannelsが2のときはwFormatTagがWAVE_FORMAT_PCM(#defineで1)でなければならないとあるのに85となっているので明らかにおかしいのはわかるのですが、どうしてそうなるのかがわからず質問しました。
また、hMmioの値を見てみたら0x0313fa38{unused = 0}とあり、最初の方のif文に引っかかってないあたりNULLとは違う意味のようですが、調べても出てこなかったのでこれがどういう意味なのかもできれば教えていただけると嬉しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/23 03:13
2017/08/23 05:32