C++内存泄露(Memory Leak Faults)之高级篇
来源:互联网 发布:教师培训挂机软件 编辑:程序博客网 时间:2024/06/06 19:02
http://blog.csdn.net/acb0y/article/details/6211335
C++内存泄露(Memory Leak Faults)之高级篇
如果在构造函数中有申请内存的操作,且在其他程序中有两个对象直接或间接的赋值操作,如果没有对“=”运算符进行重载定义,则会产生两次释放同一次内存操作的错误。该错误为第7类的内存错误。
Demo代码如下:
- /*
- FileName: MemoryLeakFault2.cpp
- Author: ACb0y
- Create Time: 2011年2月27日14:22:11
- Last modify Time: 2011年2月27日15:05:39
- */
- #include <iostream>
- using namespace std;
- #define TEST
- /*
- 测试基类
- */
- class base
- {
- public:
- char * strName;
- base(char *);
- base(const base &);
- ~base();
- #ifdef TEST
- base & operator = (const base &);
- #endif
- };
- /*
- 构造函数,在构造函数里有动态申请空年。
- */
- base::base(char * str)
- {
- strName = new char[strlen(str) + 1];
- strcpy(strName, str);
- }
- //拷贝构造函数
- base::base(const base & r)
- {
- strName = new char[strlen(r.strName) + 1];
- strcpy(strName, r.strName);
- }
- /*
- 析构函数,释放空间
- */
- base::~base()
- {
- if (NULL == strName)
- {
- return ;
- }
- else
- {
- cout << "释放的空间地址为:" << (int)strName << endl;
- delete [] strName;
- }
- }
- #ifdef TEST
- /*
- 赋值运算符。
- */
- base & base::operator = (base const & r)
- {
- if (this == &r)
- {
- cout << "the same object" << endl;
- }
- else
- {
- if (NULL != this->strName)
- {
- delete [] this->strName;
- }
- this->strName = new char[strlen(r.strName) + 1];
- strcpy(this->strName, r.strName);
- }
- return *this;
- }
- #endif
- int main()
- {
- base a("base_a");
- base b("base_b");
- a = b;
- return 0;
- }
运行结果如下:
但把,程序开头部分的#define TEST你运行结果会发现,统一地址的空间被释放了两次。从而发生内存泄露。
- C++内存泄露(Memory Leak Faults)之高级篇
- C++内存泄露(Memory Leak Faults)之高级篇
- C++内存泄露(Memory Leak Faults)之高级篇
- C/C++内存泄露故障(Memory Leak Faults)之简单篇
- C/C++内存泄露故障(Memory Leak Faults)之简单篇
- 使用windbg找内存泄露(memory leak)
- MFCButton Memory leak(内存泄露问题)
- 使用windbg找内存泄露(memory leak)
- 内存溢出 out of memory与内存泄露 memory leak
- 内存溢出 out of memory与内存泄露 memory leak
- 内存溢出(Oom)和内存泄露(Memory leak)
- 内存溢出OOM和内存泄露memory leak 小结
- 内存溢出 out of memory 内存泄露 memory leak ;memory leak会最终会导致out of memory!
- Java内存泄露(Memory Overflow)和内存泄露(Memory Leak)的区别
- Java的内存泄露 Memory leak of Java
- 实用.net内存泄露(memory leak)解决方案
- Memory Leak Detection:在VS2008中检查内存泄露
- jquery1.42 $.ajax Memory Leak 内存泄露问题
- EJB3和Spring技术体系比较
- 网络消息的封装
- Bash学习笔记
- 内省Introspector操作 JavaBean的简单实现方式及稍复杂实现方式 主要用到PropertyDescriptor类
- C/C++内存泄露故障(Memory Leak Faults)之简单篇
- C++内存泄露(Memory Leak Faults)之高级篇
- android Broadcast Receiver
- Struts1框架学习(五)--ActionForm Bean入门及高级应用
- 华为2012上机题
- win7如何使用virtual wifi minipoint adapt
- Android ListView分类/分组效果 - 第一种实现方式
- aix系统黄灯清除
- 如何阅读java项目的源代码
- 人工智能1