一不小心,漏了!
来源:互联网 发布:怎样取消数据有效性 编辑:程序博客网 时间:2024/04/28 23:24
这几天在写用遗传算法解决装箱问题的程序,碰到了好多奇怪的事情。其实奇怪的原因在于使用c++的指针不熟造成的,当然,指针不熟最常见的问题就是内存泄露了。想到一个很有意思的问题,即使不是我的程序的内存泄露,而我确实需要大量的内存该咋办?可以看一下这个帖子:
http://topic.csdn.net/u/20091027/16/8b8e3761-1569-4ffc-8528-bd560ada9265.html
好像也没有什么好办法。
发上面的帖子的时候,但是不是内存泄露,是我做内存测试而故意弄出来的。但是今天却发现了一个真正的泄露,程序一旦运行,就发现占用内存在一直的上升,然后到了2g的时候,就出现内存申请异常了,造成的原因,却有一定的启发性。
由于做的程序的计算量比较大,因此做程序的时候手头放了一本《提高C++性能的编程技术》边看边参考,受益匪浅。其中有一条提到 缓式计算 ,大体意思是不要预先定义好对象,直到用得着的时候再定义,会提高性能,类似于下面的:
X x;
if (condition)
x.DoSomthing;
这段代码,由于condition的存在,会导致x的构造有时候会成为一种浪费的开销,特别是当x的构造函数花费比较大的时候,因此写成下面的,效果会更好点:
if (condition){
X x;
x.DoSomthing;
}
问题就出在这里了。看我的代码
定义了两个局部的CGenome father 和 mother,结果导致了内存的大量泄漏,原因在于由于使用了赋值运算符的重载,每次对father进行赋值的时候,都会申请一块内存,从而造成泄漏。
解决方法比较简单,只需在赋值运算重载中加一个判断,判断当前的boxs是否为NULL就可以了。
- 一不小心,漏了!
- 一不小心oracle当掉了!
- 一不小心上报纸了
- 一不小心,又哭了~
- 一不小心搞错了
- 一不小心点错了
- 一不小心,七月了
- 一不小心成了傻白甜
- 一不小心又买书了
- 一不小心将手机升级了
- 【大学生活】一不小心就迷茫了
- 一不小心,上央视了,呵呵!
- 一不小心逾期了,该怎么办?
- 一不小心
- 一不小心
- 不敢发了,一不小心就没有了
- 一不小心又做了一件坏事
- 一不小心自己也有专利了
- 我是主考官:做狼才是出路(回信3)
- dos文件的分类
- dos文件与目录和管理
- 经典养牛问题 与 斐波那契数列
- dos目录、子目录与盘符
- 一不小心,漏了!
- 上帝死亡了,众神在堕落
- DOS的启动过程详解
- 《程序员羊皮卷》荣升当当IT图书飙升榜第一名
- Web Services 入门
- 网页制作
- 计算计信息处理
- 对称密码算法DES中的子密钥生成算法(密钥扩展算法)
- 关于补充XP2、XP3进行OPC通信时的DCOM配置要素