ここから本文です

書き込み違反の解決法(C++)

mar********さん

2009/3/2411:28:02

書き込み違反の解決法(C++)

C++Builderを使っています。

コンパイルに問題はないのですが、実行時に20回に1回程度以下のようなエラーメッセージが表示されます。

「モジュール'○○.exe'のアドレス0049B4DFでアドレス4062E013に対する書き込み違反がおきました」

動作に問題はないのであまり気にしていませんでしたが、解決しないと気持ち悪いので、
このエラーメッセージが表示される原因に心当たりのある方がいましたらご回答をお願いいたします。

閲覧数:
5,582
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

zwi********さん

2009/3/2412:07:25

>動作に問題はないのであまり気にしていませんでしたが、解決しないと気持ち悪いので、
問題が無い気がしているだけで実は重症です。
そのエラーは、メモリの書き変えてはいけない場所を書き換えている場合に出ます。たまたま、そのエラーで警告が出ていますが、もし書き換えても良い場所を書き換えていたら警告も出ずにデータを破壊する可能性が高いです。
考えられる原因は次の通りです。
(1)ポインタが想定していない場所のアドレスを指している。
(2)mallocやnewで確保したメモリのサイズが実際の使用量に足りない。
(3)配列の添え字が確保した配列の外を指している。
(4)そもそもポインタを初期化していない。
(6)ポインタが破壊されている。←原因は上の(1)~(4)
デバッガで動かせば、エラー発生時に問題が起こったプログラムの該当行で止まるはずですのでデバッガを活用してください。

質問した人からのコメント

2009/3/25 17:26:18

笑う ご回答ありがとうございました。
残念ながらデバッガで動かすとエラーが出ないというやっかいなやつでしたが、1から見直した結果したと思われます。
memsetで初期化していない配列があり、それが悪さをしていたようです。
エラーが頻繁に起こるものではないので、本当にもう起こらないかどうか多少不安が残りますがひとまずはこれで。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる