| 威's profile我只是风的影子,根本不存在的东西PhotosBlogLists | Help |
|
08 June C++中的内存泄露问题 最近几天都在解决一个daemon的内存泄露问题,是用来做信息过滤的,并且是多线程的。
刚刚写完这个程序的时候就发现有内存泄露,平均1000次处理信息后会泄露502K,很严重。 之前我曾经做过一些C程序的内存泄露的检查,C的比较好办一些,只要有内存泄露肯定是 有malloc而没有对应的free, 而由于C++语言本身的复杂性,它的内存泄露检测就没有这么简单了。 比如下面这种情况:
char *test = new char[10];
delete test; 确实是用了delete的,但是写错了,应该是 delete []test 才正确。
还有以下的情况: #include <iostream>
#include <string> using namespace std;
class VBase
{ public: virtual ~VBase(){} // 如果没有这行,就不能释放Test中分配的内存 virtual void test() = 0; }; class Test : public VBase
{ public: Test(){} ~Test(){} virtual void test(){} }; int main() { VBase *vb; Test *test = new Test(); vb = test; delete vb; return 0; } 子类Test被分配了内存空间,可是释放的时候是从父类VBase的指针释放的,这种情况, 如果父类的析构函数不是虚函数,就不会调用子类的析构函数(即使父类是抽象类也是如此!), 从而导致子类中分配的内存不能释放。 对C++语言的掌握不仅仅是能写出可以正确运行的程序来! 能写出稳定、高效、灵活且没有内存泄露的程序来的才算C++用的好。 |
|
|