您的位置:首页 > 其它

关于内存泄露的一点实例

2015-02-08 12:50 274 查看

#include<stdio.h>

#include<string.h>

class simpleClass {

private:

 char *m_buf;

 size_t m_nSize;

 int *m_count;

public:

 simpleClass(size_t n=1) {

  m_buf=new char
;

  m_nSize=n;

  m_count=new int;

  *m_count=1;

  printf("count is:%d\n",*m_count);

 };

 simpleClass(const simpleClass &s){

  m_nSize=s.m_nSize;

  m_buf=s.m_buf;

  m_count=s.m_count;

     (*m_count)++;

        printf("count is:%d\n",*m_count);

 };

   

 /*

 simpleClass& operator=(const simpleClass &s)                //代码片段二

 {

  if(m_buf==s.m_buf)

    return *this;

  (*m_count)--;

  if(*m_count==0)

  {

   printf("%d is deleted at %xd\n",m_nSize,m_buf);

   delete[] m_buf;

   delete m_count;

  }

  m_buf=s.m_buf;

  m_nSize=s.m_nSize;

  m_count=s.m_count;

  (*m_count)++;

 };

    */

 ~simpleClass(){

  (*m_count)--;

  printf("count is:%d\n",*m_count);

  if(*m_count==0)

  {

   printf("%d is deleted at %xd\n",m_nSize,m_buf);

   delete[] m_buf;

   delete m_count;

  }

 };

 char *GetBuf(){

  return m_buf;

 };

};

void foo()

{

 simpleClass a(10);

 char *p=a.GetBuf();

 strcpy(p,"hello");

 printf("%s\n",p);

 simpleClass b=a;

   

 /*

 simpleClass c(20);                            //代码片段一

 c=a;

    */

 printf("b=%s\n",b.GetBuf());

}

int main()

{

 foo();

 printf("exit main()...\n");

}

将代码片段一去掉注释,程序出现内存泄露,将代码片段二去掉注释,内存泄漏的问题得到解决。

***创建内存时,初始化指针指向它,当指针不再指向它时,内存应该被销毁***
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: