1、首先需要打开vc++,然后开始编写好程序源代码。
2、在执行程序时弹出的错误警告对话框,这个就是错误的信息,然后按快捷键y,等待一会。
3、最后,此时使用delete就是删除一个不存在的指针,从而报错,如下效果就是可以了。
1、先写出源代码。
2、下图是在执行程序时弹出的错误警告对话框,类似的情况很多,我在调试dll插件的时候也时常碰到,后来发现大多是指针引起的错误。
3、因为pDist指针是静态分配的内存,当程序运行完后,其内存自动释放,此时使用delete就是删除一个不存在的指针,从而报错,而实际上delete是与new搭配使用的。
4、如果在运行的过程中你想知道每个变量有没有赋值,都是什么值的话可以从下图中查看
5、在下图标红的位置处你可以看到自己究竟在哪些地方加了断点。不需要时可以勾选掉,那样程序就不会走进去了。
6、如果你在运行的过程中知道是哪个地方出错了不需要走下去了,就点击一下下面的按钮程序将自动退出debug模式。
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
窗口可能还没有创建.具体要看你的代码.
对应50、51行为:
_AFXWIN_INLINE void CWnd::SetFont(CFont* pFont, BOOL bRedraw)
{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, WM_SETFONT, (WPARAM)pFont->GetSafeHandle(), bRedraw); }
ASSERT(::IsWindow(m_hWnd)); //表示 ::IsWindow(m_hWnd) 这个函数一定要返回true,否则就会弹出你这个对话框。这说明你这个CWnd类并不是一个有效的窗口。
ASSERT 对于检测代码的错误很重要,你应该学习并掌握,且在你自己的代码多用它。像这个例子,由于有ASSERT,你能够很快把程序的错误定位到“是由于你的CWnd类有问题” 。
一般ASSERT错误对话框出现后,按重试按钮 ,vs 会定位到错误的源代码 。这时需要观察“调用堆栈”(在调试模式下 按ALT+7 可以打开调用堆栈窗口),看看程序整个调用过程,是哪一步出错了导致现在的结果。
记住: ASSERT 和 调用堆栈 这2个工具 对于调试程序很重要。你的程序难免错误,这会帮你很快找到错误。希望你记住,去网上找找相关的知识。