关于内存泄露的一点实例
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");
}
将代码片段一去掉注释,程序出现内存泄露,将代码片段二去掉注释,内存泄漏的问题得到解决。
***创建内存时,初始化指针指向它,当指针不再指向它时,内存应该被销毁***
#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");
}
将代码片段一去掉注释,程序出现内存泄露,将代码片段二去掉注释,内存泄漏的问题得到解决。
***创建内存时,初始化指针指向它,当指针不再指向它时,内存应该被销毁***
相关文章推荐
- 关于内存泄露的一点心得
- 关于内存泄露及野指针的一点小总结
- 关于MFC下检查和消除内存泄露的技巧
- 关于内存泄露
- 关于c++检测内存泄露相关知识(windows程序调试)
- 关于MFC下检查和消除内存泄露的技巧
- VC知识点:关于没有提示的内存泄露
- [转]关于内存泄露测试工具
- 关于0字节的内存泄露 与 0字节的内存申请
- 关于计算机的数据内存问题的一点小探讨
- 关于java内存泄露
- 【orange】关于从软盘加载内核到内存的一点感悟
- 关于java的内存泄露
- 关于c++检测内存泄露相关知识(windows程序调试)
- 关于CString的AllocSysString函数的内存泄露
- 关于在VS2008以下版本的MFC程序使用VS 2008 FeaturePack出现内存泄露的理解
- 关于MFC下检查和消除内存泄露的技巧
- 关于c++检测内存泄露相关知识(windows程序调试)
- 关于安装查看内存泄露工具BoundsChecker 时出错的问题 ERROR432
- [转]关于内存泄露测试工具