debug assertion failed 调试解决方法

来源:互联网 发布:c语言中的完全数 编辑:程序博客网 时间:2024/05/13 06:26
错误提示:

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的定义如下:

 

[cpp] view plaincopy
  1. class U_Ptr{  
  2.     friend class HasPtr;  
  3.       
  4.     int *ip;  
  5.     size_t use;  
  6.       
  7.     U_Ptr(int *p): ip(p),use(1){};  
  8.       
  9.     ~U_Ptr()  
  10.     {  
  11.         /************************************************************************/  
  12.         /* 这里不能用delete,因为ip是静态分配的内存,当程序运行完后,其内存自动取消 
  13.             所以再用delete时,就是删除一个不存在的指针,从而报错*/  
  14.         /************************************************************************/  
  15.     delete  ip;  
  16.     }  
  17. };  

其中的析构函数中有条指令:delete ip;出错,原因如注意所示,因为ip为静态分配内存,当程序执行完毕后,其所分配的内存自动收回,则ip就成为了一个野指针,若使用delete去删除,则错误。所以正确的做法就是将delete ip删除。

 

 

 

 

0 0
原创粉丝点击