内存泄漏
什么是内存泄漏?
申请的内存,指向混乱,丢失首地址,无法指向也无法释放。就为内存泄漏
例1:
int main(){
char *p;
p=(char*)malloc(100);//动态申请100字节的内存
P="FUNCTION"//P指向别的内存区域
return 0;
}
例2:
void fun(){
char *p;//p为局部变量,生存周期为被调函数fun()
p=(char*)malloc(100);//动态申请100字节的内存
}
int main(){
fun();
fun();
return 0;//没调用一次fun()就泄漏100字节的内存
}
解决方法:函数内部进行释放
void fun(){
char *p;//p为局部变量,生存周期为被调函数fun()
p=(char*)malloc(100);//动态申请100字节的内存
...
...
free(p);//函数调用的最后进行释放
}
int main(){
fun();
fun();
return 0;//没调用一次fun()就泄漏100字节的内存
}
解决方案2:调用函数后进行释放
char fun(){
char *p;
p=(char*)malloc(100);//p指向动态申请1001字节的内存
....
....
return p;//返回P
}
int main(){
char *p;
q=fun()//通过使用动态申请的地址
free(q);//调用完成释放
return 0;
}