デストラクタは、同じ(メイン)スレッドですべてが起きたときにUIウィンドウがキャンセルされたために、デストラクタが突然存在しなくなってしまっていると言っても意味がありますか?デストラクタが終了するのに時間が足りませんか?
私はダイアログで「キャンセル」を押すと、私はリストの時間に関連付けられたメモリを解放したい:
CMyListCtrl::~CMyListCtrl()
{
ItemData* pItemData;
int nItems = GetItemCount(); <- errors out here and it is called
for(int i=0; i<nItems; i++)
{
pItemData = (ItemData*)GetItemData(i);
if(pItemData != NULL)
delete pItemData;
}
}
マイOnCancel()ハンドラが
LONG CSetupDlg::OnCancel(UINT wParam, LONG lParam)
{
((CSetupDoc *)GetActiveDocument())->Exit();
return 0;
}
void CSetupDoc::Exit()
{
GetDocTemplate()->CloseAllDocuments(TRUE);
}
デストラクタ以下れます基本的にCloseAllDocuments()
コールのために呼び出されますが、クリーンアップしようとしているときに途中で吹き飛ばされてしまいます。私がCloseAllDocuments()
を呼び出すと、ウィンドウは決して破棄されず、デストラクタは決して呼び出されないので、デストラクタは確実にこの関数に結び付けられており、明らかに同じスレッド内にあります。
なぜ、基本的なウィンドウが魔法のように消えたかのようにアサーションしますか?
私が受け取るエラーメッセージはMyApp has triggered a breakpoint
であり、それ以上は何も実行できません。
もっとコードを入力してください。実行されているすべての行を見ることなく、デバッグするのは難しいです。 – UniversE
あなたが作業していることを(少なくともタグの中に)示してください。それはほぼ確実にWindowsですが、その後どのような環境ですか? MFC? ATL? –
デストラクタはウィンドウが破棄されるまで呼び出されないと思うので、コントロールにアクセスするには遅すぎます。私はなぜこれが 'CloseAllDocuments'と結びついているのか分かりません。 –