1. 什么是内存泄漏
所谓内存泄漏(Memory Leak),是指由于疏忽或者错误导致程序额未能释放已经不再使用的内存的情况
一般常说的内存泄漏是指堆内存的泄漏,内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,未释放该段内存,导致失去了对该段内存的控制
2. 内存泄漏的原因
应用程序一般使用new、malloc、calloc、realloc等从堆上申请某段内存进行使用,如果程序忘记使用free、delete等释放申请的该段内存,该段内存将不会被再次使用,就会造成内存泄漏
3. 内存泄漏举例
- 示例1
char * memory = (char *)malloc(10*sizeof(char));
char * newMemory = (char *)malloc(10*sizeof(char));
memory = newMemory;
对memory指针进行重新赋值后,memory失去了对原来内存的控制权限,则会造成Memory Leak
- 示例2
char * func(){
return (char *)malloc(20);
}
int main(){
func();
return 0;
}
内存申请后,没有赋值给某个指针变量,导致申请的内存失去控制,造成Memory Leak