一、内存泄露
1.定义:指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
2.泄露类型:
1>堆内存泄漏(Heap leak)
a.指利用malloc或new进行堆内存分配后,没有及时采用free或者delete释放内存,从而导致这个内存不能使用,出现内存泄露
2>系统资源泄露(Resource Leak)
a.指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定
3.如何解决
1>良好的编程习惯,malloc和free,new和delete配对使用
2>重载 new 和 delete
二、内存溢出
1.定义:内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是会产生内存溢出的问题
2.溢出类型:
1>内存分配未成功,却使用了它
a.用if(p==NULL)或if(p!=NULL)进行防错处理
2>内存分配虽然成功,但是尚未初始化就引用它
a.内存在分配完成之后,记得初始化
3>内存分配成功并且已经初始化,但操作越过了内存的边界
a.如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for 循环语句中,循环次数很容易搞错,导致数组操作越界
4>使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”
a.故释放之后一定要指向NULL
1.定义:指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
2.泄露类型:
1>堆内存泄漏(Heap leak)
a.指利用malloc或new进行堆内存分配后,没有及时采用free或者delete释放内存,从而导致这个内存不能使用,出现内存泄露
2>系统资源泄露(Resource Leak)
a.指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定
3.如何解决
1>良好的编程习惯,malloc和free,new和delete配对使用
2>重载 new 和 delete
二、内存溢出
1.定义:内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是会产生内存溢出的问题
2.溢出类型:
1>内存分配未成功,却使用了它
a.用if(p==NULL)或if(p!=NULL)进行防错处理
2>内存分配虽然成功,但是尚未初始化就引用它
a.内存在分配完成之后,记得初始化
3>内存分配成功并且已经初始化,但操作越过了内存的边界
a.如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for 循环语句中,循环次数很容易搞错,导致数组操作越界
4>使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”
a.故释放之后一定要指向NULL