您的位置:首页 > 其它

关于内存泄露及野指针的一点小总结

2013-07-23 15:43 323 查看
内存泄露

  关于内存泄露,就是在程序中,动态的分配了内存,却没有释放,以致整个程序中一直占据着那块内存,这样的情况就是内存泄露。当然,动态的分配内存都是在堆里申请的内存。

  如果说是一般的小程序,不会造成重要的内存泄露问题,当程序比较大,内存没有及时的释放,内存长期占用,就会造成内存不足的情况,导致系统崩溃。

野指针

  也是悬空指针,就是指针没有具体的指向。 野指针的成因有两种:

  1)指针变量没有初始化。任何指针变量在没有初始化的情况下不会自动赋值为NULL,它的缺省值是随机的,所以,在指针变量创建时,要么赋值为NULL,要么指向一片合法的内存。

  2)指针变量被delete或free后,没有赋值为NULL,误以为是合法的内存。if语句对它不起作用。

  注意的一个问题是:不要返回指向栈的指针和引用。

  

#include <stdio.h>
#include <stdlib.h>

int main(){
char *p = (char *)malloc(100);
strcpy(p,"hello world");
printf("%s\n",p);//打印的结果是hello world
free(p);//释放内存 但是没有赋值
if(p!=NULL){
strcpy(p,"hell");
printf("%s\n",p);//打印结果是hell
}
return 0;
}


  free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: