程序编译没问题,但是一运行就出现这个错误!Debug Assertion Failed!!
谁能帮我详细讲讲这个错误出现的原因,解决办法!
 我还是个新手,希望大家多多包涵,尽量讲细点,谢谢!!

解决方案 »

  1.   

    断言错误,看看断言对话框里提示的是那一行,找到那一行的ASSERT()后看里面的条件是否成立
      

  2.   

    楼上所言极是,找到这个ASSERT后,看看里面的变量,为什么会不成立,和这个变量有关的变量有哪些,然后更改你的代码
      

  3.   

    关键是断言对话框里提示的是MFC类代码里的一行
      我还是慢慢找变量吧
       引起这种错误的主要原因是什么呢 ?!
      

  4.   

    原因很多很多,比如指针为空这些,通常是这种形式的,假设P是一个指针
    ASSERT(P == NULL);
    当指针P为空时,则出现断言错误
      

  5.   

    1)编译没有问题,只能说明自己写的程序符合当前使用的编译器规定的语法,所以可以编译通过。
    2)程序正确运行,必须有一些东西作保证:比如逻辑的正确性,程序的可靠性等等。
    3)debug版本的程序没有问题,不能说明release的程序也没有问题。
    4)出现LZ说的情况,使因为违反了MFC提供的ASSERT,或者自己写的ASSERT,如果是自己的写的,那么比较好处理。查看一下代码,可能就知道原因。
    其实,MFC的ASSERT也是同样的原理设计的,就是:开发人员认为客户根本就不应该提供这个类型的数据或者这个值得数据,或者说如果提供这样的值,程序就会出现问题。所以
    所以,这就是说:LZ需要查看自己的代码,但是,自己的代码,自己看,往往会认为没有什么问题,所以碰到这样的问题,LZ
    可以考虑
    1。坚持单步跟踪自己的源代码,这是自己调试的最好的方法,看程序是否真的按照自己的设计逻辑来走,观察重要变量是否真的是自己想要的值。
    2。学会查看调用堆栈,当程序出现错误时,选择重试,而不是终止,这样,就会出现断点,然后从下往上找,找到问题的根源,这个能比较好的改正问题。不过,这种方法对于多线程程序调试有一定的局限性。
    3。输出程序的日志,这样可以大概的判断程序出现问题的地方,然后再分析较小范围的代码,这样较好。