MFC的CString的奇怪行为
strange behavior with MFC's CString
我使用MFC CString获得最奇怪的内存行为:
138行:PCD_Dir = m_pRunPCD->m_PCD_Dir;
声明:
CString PCD_Dir; (file scope, defined as a global outside of CServer )
class CRunPCD {
public:
CString m_PCD_Dir;
}
调用堆栈:
Support.dll!CServer::Init(CCfcController * pv=0x007ebe78) Line 138 C++
Support.dll!CCfcController::OnInitialUpdate() Line 156 + 0xf bytes C++
Support.dll!CCfcApp::CCncApp() Line 140 C++
Support.dll!newInstance() Line 162 + 0x2c bytes C++
memory (from watch window):
(wchar_t**)&(m_pRunPCD->m_PCD_Dir):
0x007ec270 wchar_t * *
m_pRunPCD->m_PCD_Dir.m_pszData:
0x007ee8a0 "C:ProgramDataWAIPC-DMIS" wchar_t *
(wchar_t**)&PCD_Dir:
0x068f4698 class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > PCD_Dir wchar_t * *
PCD_Dir.m_pszData:
0x789cb8f8 "" wchar_t *
然后进入赋值,我的环境是这样的:
代码:
// Assignment operators
CStringT& operator=(_In_ const CStringT& strSrc)
{
CThisSimpleString::operator=( strSrc );
return( *this );
}
调用堆栈:
mfc100ud.dll!ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::operator=(const ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > & strSrc=<Bad Ptr>) Line 1218 C++
Support.dll!CServer::Init(CCfcController * pv=0x007ebe78) Line 141 C++
Support.dll!CCfcController::OnInitialUpdate() Line 156 + 0xf bytes C++
Support.dll!CCfcApp::CCncApp() Line 140 C++
Support.dll!newInstance() Line 162 + 0x2c bytes C++
内存:&strSrc
0x007ec269 const ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > *
strSrc.m_pszData:
0xff000000 <Bad Ptr> wchar_t *
所以由于某种原因,值没有正确传递…?有趣的是,如果看看这个框架:
CNCSupport.dll!CServer::Init(CCncController * pv=0x007ebe78) Line 141 C++
则值正确。知道是什么问题吗?!我完全被难住了。任何帮助将非常感激!谢谢。
而不是:
PCD_Dir = m_pRunPCD->m_PCD_Dir;
试题:
PCD_Dir = (LPCTSTR) m_pRunPCD->m_PCD_Dir;
strSrc和m_pRunPCD->m_PCD_Dir的地址偏移了1,这是缓冲区指针无效的原因。原来我在头文件中错误地启用了打包来解决导致此问题的另一个问题。
相关文章:
- __int64 CString 返回错误的值 - C++ MFC
- 可视化 如何将 CString 值列表添加到 MFC C++ 中的组合框中?
- 如何在 MFC 中分离 CString
- 如何在 MFC 中创建"CArray<CArray<CString>>& results"?
- 在Visual C++6.0 MFC中,CString是否可以像简单类型而不是类一样安全地处理
- 比较类似MySQL的MFC CString
- 与 MFC 的 CString 连接最合适的方式是什么
- 有MFC项目.我需要使其独立于 MFC.我需要CString的克隆
- CString 以在 MFC 中编辑控件
- CString to LPWSTR in mfc
- (EDIT:MFC)CString类的对象的内部结构是什么
- 将 MFC 的 CString 转换为 ASCII 和 UNICODE 的 int
- C++ MFC double to CString
- 使用CString的MFC TextOut失败
- MFC如何从另一个类获得CString到CRegSettings类
- MFC的CString的奇怪行为
- 将MFC CString转换为无符号整数
- c++ MFC:从Char*创建CString时内存泄漏
- 转换从CString数组到整数数组在MFC
- 在MFC中将LPBYTE数据转换为CString