我有一個帶有屬性窗口的MFC應用程序。我屬性窗口我已經實現了一個自定義的CMFCPropertyGridProperty,所以無論何時用戶單擊添加在該屬性中的按鈕,都會彈出另一個對話框。MFC對話框成員變量不在範圍內的隨機崩潰
void CMFCPropertyGridCustomProperty::OnClickButton(CPoint point) {
CSampleDlg* configDlg = new CSampleDlg(NULL);
INT_PTR bResult = configDlg->DoModal();
if(bResult != 1) //If user cancels bResult is 2 ,if select ok bResult is 1
{
return;
}
CString selectedOutput = configDlg->GetSelectionOutput();
CString configValue = configDlg->GetSelectionElemValue();
但問題是,當我在調試模式下正在運行,有時它工作正常,但有時它崩潰的configDlg-> GetSelectionOutput()線。在callStack中,我發現當時該變量超出了範圍。
這裏是我的對話框代碼的一部分:
IMPLEMENT_DYNAMIC(CSomeClassDlg, CDialogEx)
CSomeClassDlg::CSomeClassDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CSomeClassDlg::IDD, pParent)
{
m_DevNameStr = "";
m_ElemValue = "";
}
CSomeClassDlg::~CSomeClassDlg()
{
delete m_DataXMLTree;
m_DataXMLTree = NULL;
delete m_TemplateXMLTree;
m_TemplateXMLTree = NULL;
}
void CSomeClassDlg::OnItemchangedElementList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int nPos = -1;
nPos = m_ElementListCtrl.GetNextItem(-1,LVNI_SELECTED);
if(nPos != -1)
{
elemDataNode = (CTreeNode*)(m_ElementListCtrl.GetItemData(nSelectedItemIndex));
elemTepmplateNode = GetTemplateElement(elemDataNode);
ShowElemDescription(elemDataNode,elemTepmplateNode);
}
else
{
return;
}
*pResult = 0;
}
void CSomeClassDlg::ShowElemDescription(CTreeNode* dataElemNode, CTreeNode* templateElemNode)
{
if(dataElemNode==NULL || templateElemNode==NULL)
{
m_DescEditCtrl.SetWindowTextA("");
return;
}
CString PIXITStr = templateElemNode->GetAttributeValue("AssociatedPixit");
CString descriptionStr = templateElemNode->GetAttributeValue("Description");
CString valueStr = dataElemNode->GetAttributeValue("Value");
m_DescEditCtrl.SetWindowTextA(descriptionStr);
m_DevNameStr = PIXITStr;
m_ElemValue = valueStr;
}
CString CSomeClassDlg::GetSelectionOutput()
{
return m_DevNameStr;
}
CString CSomeClassDlg::GetSelectionElemValue()
{
return m_ElemValue;
}
但我不明白,如果是這樣,那麼爲什麼它不是每次發生的問題。如果真的是這個問題,那麼在做doModal()之後,最好的方法是獲取多個成員變量。請幫忙。
應該有這樣做沒問題,所以問題在於你的對話框的代碼。 「隨機」問題通常表示未初始化的變量。 – molbdnilo
@molbdnilo,在構造函數中我已經初始化它「」。仍然無法解決它。實際上,變量存儲哪個字段在listctrl中被選中並生成一個字符串並將其存儲爲meber變量。我甚至在OnClickOK函數中放置了斷點。價值在那裏仍然可以訪問。但是在完成模式之後,會發生隨機崩潰。我可以試試這個以避免碰撞至少嗎? –
即使你可以捕捉到這種異常,而你卻無法忽略它,但忽略它卻沒有什麼意義。您需要顯示對話框代碼。 – molbdnilo