本文主要是介绍CString 变量 析构时,报错.详见内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CString 变量 析构时,报错.详见内容代码如下:
调用堆栈显示调用过程为
语句一 -> 函数二 -> 语句三 ->语句四
语句四处发生异常。显示pStringMgr为0xdddddddd.
找不出错误原因,请指点
------解决方案--------------------
可能CString对象的堆栈被破坏了
------解决方案--------------------
跨线程还是跨模块用CString了
------解决方案--------------------
CString strOne("ABC");
CString strTwo("DEF");
这里需要析构的cstring变量就这两个,但是这样赋值好像没有问题的
你去掉这两个变量试试看,比较那里用Compare直接比较试一下
CString拷贝:
CString str;
CString Str;
str.Format(L"%s", Str);
- C/C++ code
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);
这篇关于CString 变量 析构时,报错.详见内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!