错误提示:
Debug Assertion Failed!
Program: D:/wyuStud/debug/wyuStud.exe
File: afx.inl
Line:157
调试方法:
首先如果你用的是vc6的话:
1。按F5运行你的程序
2。在出错时,选择“重试”
3。按ALT+7调出“调用栈”窗口
4。双击从上往下的最近一个自己定义的函数,系统会自动把该函数所在的文件显示出来,此时程序就暂停在光标处。一般来说错误就出在这附近。你可以通过查看变量的值来确认。
具体事例:
按照上面的做法:弹出一个对话框:
点击函数:(注意一定是自己写的函数,不要去修改库函数)
错误原因:
目前只发现:使用了野指针。
跟踪代码并调试:(通过按照调试方法中描述的,点击自己编写的函数,然后逐个函数查找错误。我就是这么做的,然后发现了错误所在)
发现在函数U_Ptr::处有疑点;U_Ptr的定义如下:
- class U_Ptr{
- friend class HasPtr;
- int *ip;
- size_t use;
- U_Ptr(int *p): ip(p),use(1){};
- ~U_Ptr()
- {
- /************************************************************************/
- /* 这里不能用delete,因为ip是静态分配的内存,当程序运行完后,其内存自动取消
- 所以再用delete时,就是删除一个不存在的指针,从而报错*/
- /************************************************************************/
- delete ip;
- }
- };
其中的析构函数中有条指令:delete ip;出错,原因如注意所示,因为ip为静态分配内存,当程序执行完毕后,其所分配的内存自动收回,则ip就成为了一个野指针,若使用delete去删除,则错误。所以正确的做法就是将delete ip删除。