CString 变量 析构时,报错.详见内容
代码如下:
调用堆栈显示调用过程为
语句一 -> 函数二 -> 语句三 ->语句四
语句四处发生异常。显示pStringMgr为0xdddddddd.
找不出错误原因,请指点
------解决方案--------------------
可能CString对象的堆栈被破坏了
------解决方案--------------------
跨线程还是跨模块用CString了
------解决方案--------------------
CString strOne("ABC");
CString strTwo("DEF");
这里需要析构的cstring变量就这两个,但是这样赋值好像没有问题的
你去掉这两个变量试试看,比较那里用Compare直接比较试一下
CString拷贝:
CString str;
CString Str;
str.Format(L"%s", Str);
LRESULT CXxx::OnEnableEdit(WPARAM, LPARAM) { CString strOne("ABC"); CString strTwo("DEF"); UpdateData(true); if (m_s_ComString == strOne) { m_nFlag = MODE_ONE; } if (m_s_ComString == strTwo) { m_nFlag = MODE_TWO; } switch (m_nFlag) { case MODE_ONE: { ((CComboBox *)GetDlgItem(IDC_COM_STAND_ITEM))->EnableWindow(true); break; } case MODE_TWO: { ((CComboBox *)GetDlgItem(IDC_COM_STAND_ITEM))->EnableWindow(false); CXXXDialog dlg; dlg.DoModal(); } } return 0; //语句一 } ~CStringT() throw() //函数二 { } ~CSimpleStringT() throw() { CStringData* pData = GetData(); pData->Release(); //语句三 } void struct CstringData::Release() throw() { ATLASSERT( nRefs != 0 ); if( _AtlInterlockedDecrement( &nRefs ) <= 0 ) { pStringMgr->Free( this ); //语句四 } }
调用堆栈显示调用过程为
语句一 -> 函数二 -> 语句三 ->语句四
语句四处发生异常。显示pStringMgr为0xdddddddd.
找不出错误原因,请指点
------解决方案--------------------
可能CString对象的堆栈被破坏了
------解决方案--------------------
跨线程还是跨模块用CString了
------解决方案--------------------
CString strOne("ABC");
CString strTwo("DEF");
这里需要析构的cstring变量就这两个,但是这样赋值好像没有问题的
你去掉这两个变量试试看,比较那里用Compare直接比较试一下
CString拷贝:
CString str;
CString Str;
str.Format(L"%s", Str);