• VC程序异常中断的原因


    自己编写的VC程序,编译调试通过,运行良好,然后关闭运行界面,就弹出一个“已经触发一个中断”的提示,然后断点就停在了下面这个中断处。

    _CRTIMP void _cdecl _CrtDbgBreak(
    void
    )
    {
    __debugbreak();
    }
     
    答案::::::::::::::::::::::::::::::::::::::::::::
     
    delete 或者free 出错
    释放了不该释放的内存或者,释放的方法不对
    1)静态变量,全局变量,局部变量的地址,不是动态分配的,如果有指向这些变量的指针,任何释放都是错误的。
    2)new 分配的指针,用 delete 释放
    new[] 分配的指针 ,用 delete[] 释放
    malloc 分配的指针 用 free 释放
    3) 全局变量析构出现异常,或者最后析构的变量出现异常。
    可能是CArray对象类元素释放的不对,
    CArray <float,float&> dx;
    这种的怎么释放呀?

    不放心或者内存紧张的话,调用一下 RemoveAll( ),就可以了;

    1
    2
    3
    CArray <float,float&> dx;
    dx.Add(10.0);  // Element 0dx.Add(40.0);  // Element 1
    dx.RemoveAll( );//主动释放CArray分配的内存,不然dx析构时会自动释放,不会出什么问题。
     
    如果还在调试状态,找到调用栈窗口,可以具体找到函数,就可以定位出错的代码了。
    首先,如果调试时错误在系统,而不在你自己的程序的,多半实际是你自己的程序出错。

    _CrtDbgBreak
    1)找指针

    2)找你不熟悉的那些东西,查看是不是用错了,例如CArray ;查看MSDN,知道这些东西的正确使用方法,问题就迎刃而解了。

    其他类似问题,先看是断言(ASSERT) 还是Debug专用函数的问题;
    断言意思是说,这个程序运行到这点,必有这个结论,没有就是用错了,不应该调用这段程序。
    Debug专用函数的,是在问题不明显时,提供的查找问题专用的函数;
    这个熟悉一下这个函数,是用来做什么的,就很容易找到问题了!!
  • 相关阅读:
    机器学习实战(六):利用AdaBoost元算法提高分类性能
    机器学习实战(五):支持向量机
    机器学习实战(四):Logistic回归
    机器学习实战(三):基于概率论的分类方法:朴素贝叶斯
    机器学习实战(一):k-近邻算法
    学习路线的思考
    非暴力沟通-读书笔记
    繁荣的悖论-读书笔记
    集体智慧编程-第四章 搜索与查询
    集体智慧编程-第三章-得到词汇在指定博客源出现的次数
  • 原文地址:https://www.cnblogs.com/amwuau/p/8579031.html
Copyright © 2020-2023  润新知