タブコントロールで貼り付けたリストコントロール

[戻る]
まるゆり 2008/02/17(日) 11:02:46
VC++を少しかじったくらいの知識しかないものです。

ダイアログベースで作成しています(MFC)
(OS:XP VC++ 6.0)

タブコントロールに、リストコントロールを貼り付けてます。
リストコントロールをダブルクリックすると、別のダイアログ@が出現して、リストコ
ントロール内で、選択した情報の詳細が表示し、編集できるようになっています。

@のダイアログが閉じられると、ダウンしてしまいます。
(登録ボタン(OnOK)、キャンセルボタンがあり、登録ボタンを押すとダウン)


親ダイアログ内

 CHeaderCtrl *pCtrl = m_tab.m_lst.GetHeaderCtrl();

この箇所がおかしいようなのですが・・・

どうして、おかしいのか、分からないのです。

ご教授、願います。

PATIO 2008/02/18(月) 10:03:51
提示されている内容からでは何ともレスのしようがないような。

まず、デバッガーで何処で不正終了(ですよね?)しているのか確認する。
のが先決かなと思います。
掲示板は文字だけのやり取りになるので
まるゆりさん自身が状況を説明できる程度には内容を把握していないと
こちらではどうしようもないです。

プログラムの規模が対して大きくないなら関係しそうな所は
丸ごと載せてしまうという手も有りますけれど。

デバッグモードで実行しているならダウンする時に何かメッセージが
出ていませんか?とにかく、出せる情報は全部出すようにしないと
状況が伝わらないので確認してみてください。

まるゆり 2008/02/18(月) 22:09:58
PATIOさん

レス、ありがとうございます。
遅くなってしまい、申し訳ございません。

ご指摘の通りですよね・・・


デバッグモードで実行した時に、不正終了した時に、表示されたメッセージは、メモリ
がリークしているとのことでした。

上記で

>親ダイアログ内

> CHeaderCtrl *pCtrl = m_tab.m_lst.GetHeaderCtrl();

と記述したのは、タブダイアログに貼り付けたリストコントロールに、情報を挿入して
いるメンバ関数です。

タブを切り替えたりするときにも、このメンバ関数が呼ばれるのですが、そのときに
は、m_tab.m_lstへアクセスすることが出来ているんです。

が、リストコントロールをダブルクリックして、編集用のダイアログを出現させ、内容
を反映させ、上記のメンバ関数内での箇所で、アクセスできずに、不正終了してしまっ
ているようなのです。

まことに、恥ずかしい質問だとは思うのですが、メモリリークしている場合、どのよう
に、調べたらよろしいのでしょうか??

たいちう 2008/02/19(火) 09:41:51
> まことに、恥ずかしい質問だとは思うのですが、メモリリークしている場合、どのよう
> に、調べたらよろしいのでしょうか??

とりあえず、調べ方を一応書いときます。

Detected memory leaks!
Dumping objects ->
{100} normal block at 0x00432AE0, 14 bytes long.
 Data: <PIYOPIYO_DATA > 50 49 59 4F 50 49 59 4F 5F 44 41 54 41 00 
Object dump complete.

この時に通知される「{100}」を_CrtSetBreakAllocに指定すると、
アロケート場所を知る(ブレークポイントに設定する)ことができます。

#include <crtdbg.h> // これが必要かも
BOOL CHogeDoc::OnNewDocument() // ダイアログベースならOnInitialDialogあたりかな。
{
    _CrtSetBreakAlloc(100); // 必要ならもっと早く記述。

※この数字100はアロケートの通番のようなので、前回と同じ操作を行う。


メモリリークは異常終了の結果ですよ。
何らかの原因で異常終了したため、正しい終了時の処理ができずに、
メモリリークしているのだと思います。

まず、正常終了できる状態にしてから、メモリリークの対処をするのが
良いと思います。
(メモリの不正アクセスが原因で異常終了していて、
  それに関連する部分がメモリリークしているという可能性もあるけど、
  この線から治すべき場所を見つけるのは難しいと思う)


アドバイスとしては、タブコントロールの基本的な使い方を
おさらいしてはいかがでしょうか。急がば回れです。
正しく動作するサンプルを自分のものにしたら、
そのサンプルと現在のプログラムの違いのどこかに
異常終了の原因があるはずです。ここがデバッグのスタート地点です。

MFC タブコントロール でググると色々サンプルが見つかります。
http://www.g-ishihara.com/mfc_ta_01.htm

まるゆり 2008/02/19(火) 12:18:51
[[解決]]
たいちうさん

ご丁寧に、教えて下さって、ありがとうございます。

学生時代にちょこっとやった程度で。
はや20年・・・

結婚、出産とで、遠ざかってたのですが、自営で必要なソフトを
自分で作ってみよう!
と思い立ち、この壁です・・・

お恥ずかしい限りです。


ありがとうございました。

今一度、出直してきます!!


一応、解決ということで、チェックさせていただきます。

古いスレッドには追加発言できません。