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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(メールソフト・メールサービス) Thunderbird にアカウントの追加ができない 1 2022/09/27 17:39
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- 教えて!goo アンドロイド用の教えて!gooアプリの戻るボタンを押すと、勝手に自動で教えて!gooアプリが終了して 2 2022/09/24 07:47
- 画像編集・動画編集・音楽編集 Windowsに付属しているビデオエディター。BGMを追加する方法は? 1 2022/06/26 08:54
- Chrome(クローム) Googleのログインエラー 1 2023/07/03 10:06
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- ノートパソコン パソコンのファイル追加履歴について 1 2022/05/07 15:35
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
VB.netでUSBメモリの固有I...
-
「ヒープサイズの設定」て何?
-
「memcpy」と「strcpy」について
-
C#のOutOfMemoryException発生...
-
EXCEL-VBAにてADOのレコードセ...
-
Linuxでexit()をフックするには?
-
メモリのセグメント違反の解決...
-
メモリの増加に関して
-
FindFirstFile ハンドル開放
-
ExcelのVBAでメモリ解放できない
-
シェル(perl)が使用するメモリ...
-
ReadEventLogについて
-
ファイルマッピング関数で失敗
-
C言語における再帰呼び出しの...
-
mallocとfree
-
DalvikとJVM
-
メモリアクセス時間の計測方法
-
動的メモリとexit(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
エクセルVBA 大容量CSVファイル...
-
EXCEL-VBAにてADOのレコードセ...
-
バッチファイルでの実行EXEのメ...
-
メモリ不足
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
C言語:関数のメモリ上でのサイ...
-
メモリの解放の仕方
-
VC++におけるメモリ使用量について
-
メモリの消費量について
-
Bitmapを重ね合わせる方法
-
メモリを解放しないとどうなる?
-
C#のOutOfMemoryException発生...
-
メモリの解放について VB6 VBA
おすすめ情報