20170226C++项目班06-07_解决C++内存泄漏(补课)

来源:互联网 发布:江南大学网络教育好吗 编辑:程序博客网 时间:2024/04/28 08:38

内存泄漏检测:

1:C/C++语言速度快:因为有指针的存在。

    空指针:nullptr,无法访问的。

    野指针 = 空悬指针:指向不再有使用权限的区域,不好调试错误

    内存泄漏:指针指向空间没有释放导致的泄漏。非常不好找完全!保证完全无内存泄漏!

2:如果有任何一个地方存在内存泄漏,软件又是长久运行的,那么最终就可能导致内存使用完。当项目很大的时候,我们就很难发现所有地方的内存泄漏。

3:内存泄漏的检测:通过对new和delete的全局重载来实现,每次new的时候就将对应地方的信息保存起来,delete的时候就删除,这样就可以实现内存泄漏的检测。

  在头文件DebugNew.h里面,添加:#define new new(__FILE__,__LINE__);

4:代码写完后,会出现很多bug,例如:

    1:在重载的delete里面,调用的全局对象的NewTracer.remove方法在程序结束,NewTracer被delete的时候会出错。

    2:在Add和Remove的时候后,可能会出现无穷递归的情况,需要使用锁来解决。

5:部分代码:

#ifndef TRACER_NEW_H_#define TRACER_NEW_H_#include <map>#ifdef _DEBUGvoid* operator new(size_t size, const char* file, long line);void* operator new(size_t size);void operator delete(void* p);class TracerNew{class TracerNewInfo//内部类!{public:TracerNewInfo(const char* file = nullptr, long line = 0);~TracerNewInfo();const char* File()const;long Line()const;private:const char* file_;long line_;};class Lock{public:Lock(TracerNew &tracer) :tracer_(tracer){tracer_.lock_count_++;}~Lock(){tracer_.lock_count_--;}private:TracerNew &tracer_;};public:TracerNew();~TracerNew();void Add(void* p, const char* file, long line);void Remove(void* p);void Dump();static bool Ready_;//防止最后全局变量NewTracer在被delete之后,还在Removemap里面的数据private:std::map<void*, TracerNewInfo> tracer_infos_;long lock_count_;};extern TracerNew NewTracer;#endif//!_DEBUG#endif//TRACER_NEW_H_

修改bug及添加新功能:

1:解决计算器项目的内存泄漏问题。
2:输入错误的时候应该抛出异常。
    例如下列表达式:=,a=,=5,1+2)*4,……应该使用异常来处理。
3:添加函数功能,使之能使用log,sin,cos,tan……
    例如:lg(5),e^5,abs(-2),sin(30)……

    添加FunNode,Table等来实现函数的功能。
    1:FunNode是一个一元节点,在FunTable里面来保存函数的字符串。
    2:FunNode优先级是最高的,因该放在因子里面来做。


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 空调出风口漏水怎么办 空调管漏水厉害怎么办 电动车车速变慢怎么办 遥控器按钮掉了怎么办 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办 汽车助力泵漏油怎么办 奔腾b70油耗高怎么办 方向机漏油了怎么办 威志油耗高怎么办 佳美2.4油耗大怎么办 笔记本电脑按键坏了怎么办 电视主板坏了怎么办 面包车电量亏电怎么办 自动挡汽车亏电怎么办 自动挡亏电了怎么办 面包车打不起火怎么办 汽车电瓶亏电怎么办 小车电池没电怎么办 汽车电瓶有电打不着火怎么办 汽车电瓶没电打不着火怎么办 汽车电池没电打不着火怎么办 汽车电瓶亏电打不着火怎么办 自动挡电瓶没电打不着火怎么办 自动挡车子没电打不着火怎么办 自动挡汽车没电打不着火怎么办 自动挡汽车有电打不着火怎么办 p0846骐达故障怎么办 汽车冷却液漏了怎么办 冷却液管子漏了怎么办 电脑网络不可用怎么办 手表带子坏了怎么办 这几天生意不好怎么办