
VC++6.0 MFCダイアログベースアプリを作成しているものです。
メインダイアログの他に別ダイアログを追加しようと思い、
新規にクラスを追加し、ダイアログを作成しました。
メインダイアログに終了ボタンがあり、押下することにより、
OnClose()を呼び、アプリを終了させています。
ここで、終了ボタンを押すと、以下のメッセージが表示されます。
ハンドルされていない例外は*****にあります。
0xC0000005: Access Violation
新規追加したクラス宣言部をコメントアウトすると、例外が発生しませんでした。
VC初心者でして、このエラーがメモリー関係では?とは想像がつくのですが、
どのようにアプリに影響しているのかがわかりません。
Access Violationが発生した時の対処法とかクラスを新規追加したことによる、
影響範囲がどの程度あるのか等、ご教授願えませんでしょうか?
よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示

No.1
- 回答日時:
VC++のデバッガを使いましょう。
デバッグモードでビルドして、デバッグ-実行
してやればAccess Violationした位置でデバッガがブレークを掛けてくれるはずです。
その後、デバッガのスタックトレースウィンドウから呼び出し元をたどっていき、Access violationの原因となったコードを探しましょう。
#感じ的に初期化/確保されていないポインタ相手にアクセスしたっぽいですが・・・
また、Access Violationなどの場合、スタック破壊が起こっている場合もあります。そういう場合はブレークポイントをいくつか設定して、実行してAccess Violation位置を探しましょう。
>クラスの新規追加による影響
ちゃんと作られたプログラムに変なクラスを突っ込んだ場合は当然影響が出ます。
逆にちゃんと作られたクラスを追加した場合に問題が発生した場合、それまでのプログラムに表面化しなかった問題があった、というだけの事です。作ってる方も人間ですから完全なものは作れないですし・・・(^^;
>影響範囲
さまざまかと(^^;
C++例外でトラップしてやればAccess Violationもトラップしてやる事は出来ます(参考URLの17章参照)が、通常、起こった時点でアルゴリズム的に問題があると思います。
仕事などでやっている場合は
Purify(http://www.sra.co.jp/Rational/purify/purifyNT.ht …やBoundsChecker(http://www.numegajapan.com/products/vc.htm)などのプログラムチェッカを導入するのも手ですね。
#蛇足
OnClose()後に例外が発生するという事は終了処理回りに不備があるのでしょう。
確保したメモリを開放していなかったり、逆に既に開放しているメモリをもう一度開放しようとしていたり・・・
ある程度経験を積めば、メモリ周りのトラブルの対処(というよりトラブルを起こさないためのプログラムか)方法も身につくかと。
確かにこの辺のプログラムスタイルについての解説はあまり無いのも確かですが、まったく無いわけでもありません。
・Effective C++
・More Effective C++
・Writing Solidcode
・Code Complete
あたりが参考になるかと思います。
また、Access Violation(というよりx86のプロテクトモードの例外機構)については
・はじめて読む486
が参考になるかと思います。
参考URL:http://www.microsoft.com/japan/developer/library …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 大容量CSVファイル...
-
C言語における再帰呼び出しの...
-
メモリーリークエラーが起こる
-
ExitProcessの関数コールについ...
-
メモリを解放しないとどうなる?
-
C言語初心者です。debug assert...
-
クリスタルレポートでメモリ不...
-
VBAの配列サイズとメモリに関して
-
スタックメモリについて
-
EXCEL-VBAにてADOのレコードセ...
-
ファイルマッピング関数で失敗
-
大容量のメモリ確保をスワップ...
-
取ってこれないメモリのはずのm...
-
「ヒープサイズの設定」て何?
-
メモリ負荷試験のツール
-
メモリの解放について VB6 VBA
-
オブジェクトの開放
-
ファミコンって8ビットしかない...
-
Bitmapを重ね合わせる方法
-
マイコンのメモリマップについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メモリが不足しています(VBA)
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
エクセルのメモリ使用状況/Appl...
-
「ヒープサイズの設定」て何?
-
メモリを解放しないとどうなる?
-
エクセルVBA 大容量CSVファイル...
-
メモリ不足
-
H8 マイコン セクションの設...
-
EXCEL-VBAにてADOのレコードセ...
-
組み込み系でのmallocについて
-
C言語における再帰呼び出しの...
-
「memcpy」と「strcpy」について
-
メモリーリークエラーが起こる
-
こんなメッセージがでます
-
VB2005 Datagridview の仮想モ...
-
メモリの解放の仕方
-
VB.netでUSBメモリの固有I...
-
C言語:関数のメモリ上でのサイ...
おすすめ情報