2011-10-22 33 views
0

我正在使用的MFC的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++ 

存儲器(從監視窗口):

(wchar_t**)&(m_pRunPCD->m_PCD_Dir): 
0x007ec270 wchar_t * * 

m_pRunPCD->m_PCD_Dir.m_pszData: 
0x007ee8a0 "C:\ProgramData\WAI\PC-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++ 

那麼該值是正確的。 任何想法是什麼問題?!我完全難倒了。任何幫助將不勝感激!謝謝。

回答

1

代替:

PCD_Dir = m_pRunPCD->m_PCD_Dir; 

嘗試:

PCD_Dir = (LPCTSTR) m_pRunPCD->m_PCD_Dir; 
+0

這產生了與上面相同的結果 – markf78

1

原來,strSrc和m_pRunPCD-> m_PCD_Dir的地址是由1偏移量,這是緩衝區指針無效的原因。事實證明,我錯誤地啓用了打包頭文件來解決導致此問題的另一個問題。

+0

在本地包含或任何其他指令之前,您應該始終在您的源文件中包含系統頭文件作爲第一件事。這將保持一致。 –

相關問題