プロが教える店舗&オフィスのセキュリティ対策術

Microsoft Visual C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。
そこでデバッグを行ったら、

ハンドルされていない例外は”アプリ名.exe”にあります
:0xC0000005:Access Violation。

というメッセージが出てきました。
ネットでAccess Violationについて調べたのですが、いまひとつ理解できません。
これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか?
初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。お願いします。

A 回答 (4件)

アクセス違反。

システム自身の保護機能発動。
おそらくアクセスできないメモリにアクセスしてる。

どんなプログラムか不明ですが、
・char[]等: バッファの最後よりも後ろへ出力しようとしてる
・printf系: 書式指定箇所を埋めるのにパラメータが足りない
などが良く引っかかる点。

プログラムを晒せば、もっと的確なレスポンスが付くかもしれません
    • good
    • 1

対策としては,正しくプログラムを作ることしか有りません.


Cの場合,ありとあらゆるミスが,Access Violationに繋がる可能性があります.どれか1点だけ停策して済むものではありません.
    • good
    • 1

VISUALC++だったらデバッガも含まれていますよね.


デバッガの元で動かすと,エラーの原因となった行が判ります.
ライブラリでエラーが起きているのなら,それを呼び出した側に問題があります.このばあい呼び出し元もデバッガでは表示されます.

バグの間接的影響でAccessViolationが起きている場合は追跡がやっかいですが...

0xC0000005というと,配列のお尻を突き抜けたと言うより,点で見当違いのアドレスにアクセスしてしまった臭いですね.

この回答への補足

初心者なので、詳しくは理解できていないのでしょうが、なんとなく原因がわかった気がします。
そこで、あつかましいようなのですが、配列のてんで見当違いのアドレスにアクセスしてしまうのを防ぐにはどのようにしたらよろしいのでしょうか?
ご指導ください。

補足日時:2007/05/28 13:16
    • good
    • 0

No.1さんの回答に加えて…



ポインタの操作ミス。
開放済みのヒープにアクセスした等。

プログラムを晒してみる。というのには賛成ですが…
ポインタ操作が原因の場合、不具合の原因となるコードと不具合の発生する場所が違うので探すのは一苦労します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています