• ベストアンサー

【VC++6.0(MFC)】MessageBoxを使わず、MessageBoxと同機能を表現するには?

toda hiro(@hiro_knigh)の回答

回答No.7

お疲れ様です。 メモリリークだと思い、興味があって調べてみましたが結果はまだ出ていません。 メモリリークの原因としてはnewより、newで確保した領域がなんらかの原因でdeleteされていない方が多いと思います。 そこで、googleで「メモリリーク mfc」で検索してみました。 そうすると「DEBUG_NEW」に行き着きました。 「DEBUG_NEW」を定義すればメモリリークの検出手助けになると記載されているようですが、イマイチ使用方法が不明です。 そして、デバッグ版でコンパイルされた時のみしかつかえないようです。 あとは、malloc,free,new,deleteをラップして調べてみるしかないと思ったのですが、イマイチよいソースコードが記述出来ていません。 方法としては以下を考えています。 (1)newやmallocで確保した場合、確保したアドレスとソースコードのファイル名・ラインを保存  (ファイル等で保存[アドレスはvoidにキャストして保存]) (2)deleteやfreeで開放したアドレスをキーに、(1)の対応した領域を削除 メモリリークが発生した時にファイルの中をのぞいて、同じ位置で確保し開放されていないエリアがたくさんあれば、その確保した処理に対する開放処理が無いか、何らかの原因で呼ばれなくなっているかだと思います。 興味があるのでもう少し調査や検討をしてみます。 もし、ご自身で分かられた場合は申し訳ありませんが方法を教えて頂けると幸いです。 メモリリークは10年ほど前にPL/Mでプログラムを組んでいた頃に経験はしましたが、デバッグは経験者にまかせてしまったので解決方法はイマイチ覚えていません。

参考URL:
http://d.hatena.ne.jp/wata_d/20080304/1204609100

関連するQ&A

  • 【VC++6.0(MFC)】警告「LINK : warning LNK4075:」の対処方法を教えてください。

    いつもお世話になっています。 VC++初心者です。 先人が残したVC++6.0のMFCのソースをリビルドすると 以下のような警告がでます。 ***** コードを生成中... リンク中... LINK : warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます ***** リンクがうまくできていないようですが、この対処の仕方を教えていただけませんでしょうか。 よろしくお願いします。

  • 【VC++6.0(MFC)】Access Violationの対応の仕方

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++6.0(MFC)で先人が作成したソースを改良しています。 デバグモードで動かすと、 以下のメッセージが表示されるのですが、 どのように対応すればよいか、教えていただけませんでしょうか。 「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」 (※XXXXはプロジェクト名です。) (※デバグモードで動かすと同時に上記エラーが出力されます。) 上記のエラーが出ていても動かせるのですが、 デバグモード時に、メニューの「デバッグ」、「例外処理」で 「 Access Violation」の設定を 「ハンドルされてなければ停止」から「常に停止」に変更すると、 最初の画面も開けずに、混合モード画面の 7C95AB0A inc dword ptr [eax+10h] という箇所で必ず止まって、落ちてしまいます。 ここから、どのように対処すればよいか、ご教授頂きたくお願いします。

  • 【VC++6.0】MFCを利用する参考書を教えてください。

    いつもお世話になっております。 VC++初心者です。 現在、VC++6.0で過去のソースを改良しているのですが、 (個人的な主観ですが)普通のCあまりにコードが 異なりすぎていて、なかなか作業がはかどりません。 (といっても、C言語も熟知は全然していないです。) そこで、以下の内容を満たすような参考書をご存知で あれば教えて頂きたくお願いします。 *************************** ・初心者向け。 ・VC++6.0、MFCの内容。 ・1つの課題があり、それを順次作り込んでいくような内容。 ・オブジェクト指向の説明がある。  (手続き型とオブジェクト指向型プログラミングの   対比があれば嬉しいです。) ・オブジェクト指向でコーディングされている。 ・デバグの仕方、ソースコードの追い方が若干詳しく書かれてる。 *************************** 以上、よろしくお願いします。

  • VC++.NET2003でユーザー関数内でMessageBox::Show()が使えません??

    VC++.NET 2003 のヘルプの、「チュートリアル : 簡単な Windows フォームの作成」に MessageBox::Show()関数を使ってHello,worldを表示させる例が書いていますが、 この関数を、自分で作った関数(フォームのクラスのメンバ関数で、 関数のコードはインライン関数でなく、cppファイル側に書いています)に持っていくと、 error C2653: 'MessageBoxA' : 識別子がクラス名でも名前空間名でもありません。 error C2660: 'System::Windows::Forms::Control::Show' : 関数に 1 個の引数を指定できません。 と、コンパイルエラーが出てしまいます。 MessageBox::Show()を自前の関数で使う方法を、 どなたか教えていただけないでしょうか?

  • VC++の参考書

    VC++(マネージコードではない)の参考書を探しています。 VC++2005かVC++6のどちらかで、MFCを利用するような形で。 1つ1つの機能や命令の説明がされているのではなく、1冊や 各章ごとに1つのアプリケーションを作る、その上で機能や 命令が説明されている、みたいな参考書を探していますが、 今のところ出会えません。 結構VB6だったり.NET系の参考書だとそういうのも多いようですが、 VC++に関しては全然見つかりません。 ご存知の参考書がありましたらご紹介下さい。

  • 【VC++6.0(MFC)】「Out of memory」の対処の仕方を教えてください。

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++6.0(MFC)のソース修正を行っております。 そのソースを長時間実行させると、メッセージボックスで タイトル:ソフト名 メッセージ:Out of memory と出てきて悩んでいます。 (コンパイル、ビルドは成功しています。) (そのソフトを立ち上げなおすと、しばらくの間は正常に動作します。) 大変お手数ですが、 この問題を対処する手順や怪しいと思われる箇所を 経験則でも宜しいので教えて頂けませんでしょうか。

  • 【VC++2005(CLR)】コンソール画面(?)を表示させたい

    いつもお世話になっております。 VC++初心者です。 超超基本的なことなのですが、 Console::WriteLine("aiueo"); と書いた場合、どこに出力されますか? この命令は実行されていると思うのですが、 出力が確認できていないので、困っています。 すみませんが、よろしくお願いします。

  • Session.Countについて(VC2010)

    WEBアプリケーションを作成しております。 VC2005から、VC2010のソースコードアップグレードで、 if(this.Session.Count ==0)の部分でエラーになってしまうのですが、 VC2010では、「this.Session.Count ==0」の部分をどのように変更すればよいのでしょうか? ご存知の方、ご教授願います。

  • 【VC++6.0】ソースコードの文字の大きさを変更させるには?

    いつもお世話になっております。 VC++初心者です。 VC++6.0 enterprise editionを使用していますが、 表示されるソースコードの 文字の大きさを変更できずに困っています。 (VC2005 express editionではできたと思います。) ご存知の方がいらっしゃいましたら、ご教授下さい。

  • イベントハンドラが取得できない VC++ MFC

    おはようございます(><) VC++.NETで開発を行っています。 MFCを使って開発をしています。 CDialogを継承したCmyDialogでOnLButtonDownのイベントがとれません。 OnLButtonDownのイベントを使いたかったのですが 自動でイベントを設定するプロパティのメニュー(雷のマークみたいなもの)にイベントがなかったので 自分でCmyDialog::と書いたらリストの中に OnLButtonDown( UINT nFlags,CPoint point)がでたので 定義に追加、イベントの記述を追加しました。 雷マークで作ったイベントのコードには // TODO : ここにコントロール通知ハンドラ コードを追加します。 と自動で記述され、ブレイクポイントを設定するとそこで止まるのですが 私が記述したLButtonDownのイベントでは実行してもブレイクポイントで止まりません。 他のイベントと比べて違うのは BEGIN_MESSAGE_MAP(CmyDialog, CDialog)の中に ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnLvnColumnclickList1) のように イベントハンドラ名、リソース名?、イベント名 と自動で記述があります。 ここを追加すればいいのかなと思いましたが 左クリックに対応するイベントハンドラ名が分かりません。 問題解決に有効な情報をお持ちの方 お力をお貸しください。 よろしくお願いします(><)