• ベストアンサー

C言語でのaccess violationについて

Microsoft Visual C++でプログラムを行っていたのですが、プログラムを実行すると、エラーが発生します。 そこでデバッグを行ったら、 ハンドルされていない例外は”アプリ名.exe”にあります :0xC0000005:Access Violation。 というメッセージが出てきました。 ネットでAccess Violationについて調べたのですが、いまひとつ理解できません。 これはどういうことなのでしょうか?また、解決策をご教授願えないでしょうか? 初心者なので、可能な限り専門用語などを使わない、わかりやすい解説をしていただけると幸いです。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.1

アクセス違反。システム自身の保護機能発動。 おそらくアクセスできないメモリにアクセスしてる。 どんなプログラムか不明ですが、 ・char[]等: バッファの最後よりも後ろへ出力しようとしてる ・printf系: 書式指定箇所を埋めるのにパラメータが足りない などが良く引っかかる点。 プログラムを晒せば、もっと的確なレスポンスが付くかもしれません

その他の回答 (3)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.4

対策としては,正しくプログラムを作ることしか有りません. Cの場合,ありとあらゆるミスが,Access Violationに繋がる可能性があります.どれか1点だけ停策して済むものではありません.

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

VISUALC++だったらデバッガも含まれていますよね. デバッガの元で動かすと,エラーの原因となった行が判ります. ライブラリでエラーが起きているのなら,それを呼び出した側に問題があります.このばあい呼び出し元もデバッガでは表示されます. バグの間接的影響でAccessViolationが起きている場合は追跡がやっかいですが... 0xC0000005というと,配列のお尻を突き抜けたと言うより,点で見当違いのアドレスにアクセスしてしまった臭いですね.

HH164
質問者

補足

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

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

No.1さんの回答に加えて… ポインタの操作ミス。 開放済みのヒープにアクセスした等。 プログラムを晒してみる。というのには賛成ですが… ポインタ操作が原因の場合、不具合の原因となるコードと不具合の発生する場所が違うので探すのは一苦労します。

関連するQ&A