C++中 Debug Assertion Failed! 代码调试

 错误提示:

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删除。

 

 

 

 

你可能感兴趣的:(C++学习)