避免内存泄露、迷途指针

#include using namespace std; class CAT { public: CAT(int age){itsAge=age;} ~CAT(){} int GetAge() const{return itsAge;} private: int itsAge; }; CAT *MakeCat(int age); int main() { int age=7; CAT *Boots=MakeCat(age); cout<<"boot is "<<(*Boots).GetAge()<<" year old"<

 

内存泄露产生:没有释放在堆中申请的内存。

从makecat函数返回一个指针,之后再main函数里释放内存。

我认为,最好封装在函数里,new和delete看起来才有对称感。

还需要再改进。

 


既然提到了,就说一下迷途指针和内存泄露的原理和避免方法:

 

迷途指针:将delete用于指针,但没有将指针置为空而引发的。说白了,就是搞不清指针指向的内存是否被释放了。(这时,如果再次释放,或者让指针指向别的内存地址,都可能会导致内存泄露。)避免的方法是养成良好的编程习惯:申请指针的时候就对指针进行初始化,如果不知道初始值是什么,就先置0;同理,delete删除指针指向的内存后,也要把指针重新置0,这时,如果对空指针delete,编译器会自动跳过不执行。

内存泄露:1,重复delete。2,引用局部函数的变量。3,重新给指针赋值之前没有释放它原来指向的内存。

说白了,就是没有释放在堆中申请的内存,就是把内存的地址丢了。如果把内存比作房子,指针比作门牌号。就是把门牌号忘记了。

好的习惯是,结合初始化指针的习惯和置0指针的习惯,每次让指针指向别的内存之前,先判断该指针是否为空。如果不为空,说明指针还留着别的地址。其实如果new和delete养成对称的习惯,就不会导致内存泄露的。


 

早发现错误,早修正bug。

做个有良好编程习惯的程序员。

你可能感兴趣的:(C/C++,语法)