アクセス・バイオレーションでハング! – プログラミング – Home

アクセス・バイオレーションでハング!
 
通知
すべてクリア

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


Reach
 Reach
(@Reach)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

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

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


引用解決済
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

・(char *)pPlaybackBuffer + nPlaybackBufferPos
・lpwh
・lpwh->lpData
・(char *)pPlaybackBuffer + nPlaybackBufferPos + lpwh->dwBytesRecorded - 1
・(char *)lpwh->lpData + lpwh->dwBytesRecorded - 1
などが有効なオブジェクトを指していないんじゃないですか?

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


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

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


返信引用
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

デバッガで、
lpwh
pPlaybackBuffer
の指す実態の状況を見ることができます。
pPlaybackBuffer + nPlaybackBufferPos
も見れます。


返信引用
Jun
 Jun
(@Jun)
ゲスト
結合: 23年前
投稿: 12
 

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました