程序中野指针的存在是一件非常危险的事情,比如:
pEdit->Create(WS_CHILD, CRect(0, 0, 0, 0), this, 1);
这样会导致
Test.exe中的0x006d0e4d出有未经处理的一场:0xc0000005:读取位置0xcccccccc时发生访问冲突。
并显示异常代码为:
Winctrl1.cpp中的
// CEdit
BOOL CEdit::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
CWnd* pWnd = this;
return pWnd->Create(_T("EDIT"), NULL, dwStyle, rect, pParentWnd, nID);
}
产生这种情况的原因在于pEdit没有被初始化而为随机值,产生了野指针的函数调用。将该段代码改为
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
CRect(10, 10, 100, 100), this, 1);
即可。
另外,最好把new和create操作放在类的构造函数或者初始化函数之中,而不要放在成员函数之中。在类的析构函数中要释放开辟的所有内存空间。