首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

小弟我这个vs2010 有一个小疑点,有人遇到过么(100分噢)

2012-10-07 
我这个vs2010 有一个小问题,有人遇到过么(100分噢)比如我写这么两句 我写在 OnMouseMove中的。CClassXXXX *

我这个vs2010 有一个小问题,有人遇到过么(100分噢)
比如我写这么两句 我写在 OnMouseMove中的。

CClassXXXX *pClassXXXX=NULL;
pClassXXXX->DoSomeThing();


debug下运行,一定会报错。

在vc6中系统会自动停止在报错那一行。就是pClassXXXX->DoSomeThing();然后调用堆栈也是能看到这一行。
可是在vs2010中这个简单的指针为空的问题。竟然找不到报错的具体位置。调用堆栈也是像下面这样。乱糟糟的。
什么原因呢,是mfc的架构给改变了么。


>mfc100d.dll!ATL::ShouldTraceOutput(unsigned long dwModule, unsigned long dwCategory, unsigned int nLevel, const CAtlTraceCategory * * ppCategory, int (int, const char *, int, const char *, const char *, <no type>)* * pfnCrtDbgReport) 行 648 + 0x11 字节C++
 mfc100d.dll!AtlTraceVA(unsigned long dwModule, const char * pszFileName, int nLine, unsigned long dwCategory, unsigned int nLevel, const char * pszFormat, char * ptr) 行 387 + 0x19 字节C++
 cccccccc()
 mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) 行 2495C++
 mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) 行 2067 + 0x20 字节C++
 mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) 行 248 + 0x1c 字节C++
 mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) 行 411C++
 mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) 行 420 + 0x15 字节C++


[解决办法]
堆栈里面不用看系统代码,只看自己的代码就行。类似这样的问题可以很快找到位置
[解决办法]
这不是MFC的问题,可能是编译器的问题,可能是某些编译选项改变了。
[解决办法]
pClassXXXX->DoSomeThing();就算pClassXXXX=0也不是有错误的。
class里面的成员函数的调用方式是thiscall,这样使用只是this指针为0
如果函数里面会检查this指针这个函数不会有任何问题。
例如:
CWnd* pc = NULL;
pc->GetSafeHwnd();// 无错误
pc->m_hWnd;// 这句会提示非法访问
// mov ecx, this
// mov ebx, dowrd ptr [ecx + m_hWnd]

热点排行