アクセス・バイオレーションでハング!

[戻る]
Reach 2002/04/18(木) 20:42:59
VC++6で使っています。
コンパイル・リンクは通るものの、
いざ実行すると
memcpy( ((char*)pPlaybackBuffer+nPlaybackBufferPos), lpwh->lpData, 
lpwh->dwBytesRecorded);
と言うとこころで
 "ハンドルされていない例外がXXX.EXEの所にあります。0xc0000005。
 アクセス・バイオレーション。”
なるエラーが出て、止まります。

どう言うところをチェックしたら、いいでしょうか?

YuO [E-Mail] 2002/04/18(木) 21:56:24
・(char *)pPlaybackBuffer + nPlaybackBufferPos
・lpwh
・lpwh->lpData
・(char *)pPlaybackBuffer + nPlaybackBufferPos + lpwh->dwBytesRecorded - 1
・(char *)lpwh->lpData + lpwh->dwBytesRecorded - 1
などが有効なオブジェクトを指していないんじゃないですか?

とりあえずは,Access Violationが発生したときのコールスタックをたどって,
上に示した値が正しいかどうかをチェックしてみることです。

PATIO 2002/04/23(火) 10:42:24
簡単な理屈で確保していないメモリは使えません。
例えば、10バイト確保したのに11バイト目を見ようとすれば、
当然、Access Violationになります。
memcpyで使っているポインタが指し示す先等、
確保していないようなところまで見ている場合は、NGです。
また、ポインタそのものに確保されたメモリのアドレスが
ちゃんと入っていることが前提条件です。
単にポインタを変数宣言しただけで使おうとしていたりすると
大体の話、アウトになります。

いもちぃ 2002/04/23(火) 11:08:37
デバッガで、
lpwh
pPlaybackBuffer
の指す実態の状況を見ることができます。
pPlaybackBuffer + nPlaybackBufferPos
も見れます。

Jun 2002/04/23(火) 11:48:26
もう解決出来てるかと思うのですが、
落ちる所が分かったらとりあえず落ちる前に
ブレークポイントを設定して変数を確認しましょう。

古いスレッドには追加発言できません。