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

内存泄露

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

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

野指针

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

  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,防止指针在后面不小心又被解引用了。

posted @ 2013-07-23 15:43  Youth-Forever  阅读(1154)  评论(0)    收藏  举报