内存泄露

  在C++中,如果用new在堆中分配了一块内存,没有对其进行释放,就会产生内存泄露。

  char *a=new char[10];

  char *b="hey";

  strcpy(a,"hello");

  此时如果让a指向其他地方,比如说a=b;那么原先a指向的10个字节的内存块就变成了不可访问的区域,造成内存泄露。

 

  还有一种情况。在类中,如果一个类的成员变量是个指针,并且在构造函数中使用new分配了内存,并在析构函数中调用delete释放了该内存。当你用该类的一个对象去初始化另一个对象,或者给另一个对象赋值时,都会调用拷贝构造函数,但此时是浅拷贝,因为他们的指针成员变量指向同一块内存,他们不是独立的,对该指针的指向数据的操作会影响到另一个对象,另外,析构的时候会过度释放,因为用new分配的内存被释放了2次,程序会崩溃。

  解决办法是重新写拷贝构造函数,重载=操作符。

  

posted on 2014-07-01 22:46  再见猪小华  阅读(145)  评论(0编辑  收藏  举报

导航