C++中内存泄露可能有以下几点原因:
1、new与delete没有配对使用。在堆中开辟内存内存,结果在使用结束时或者析构函数中没有delete。‘
2、delete不完全,例如,构造了一个三维的整型指针数组(需要在三个维度分别new),然而在delete的时候只是把第一维或者第三维的数组内存释放。
3、重复delete,两个指针分配了同一块内存,结果都对这块内存进行了释放。
比较常见的两种操作:1、int *q = new int [10]; int* p = q; delete[]q;delete[]p; 2、调用系统默认的拷贝构造函数,然后重复析构。
尤其是free或者delete一次之后,内存管理器会对内存进行回收处理,但是如果没有及时赋NULL,野指针可能会指向任意内存地址,再次释放该地址所指向的内存块,如果在该内存块中记录了内容,可能程序会立马挂掉,但是如果该内存块暂时没有分配内容,程序不会当场崩溃,但是后期可能会对其进行写操作,那就是可能出现在某个看 似语法正常,逻辑正常的代码块中出现bug或者根部不出现bug,但是程序最终运行结果就是不对的状况这种情况就要棘手的多。
4、基类指针指向子类对象,而基类析构函数的不是虚函数,子类对象释放内存时不会调用基类析构函数,造成内存泄露。