C语言中的内存泄漏与野指针

来源:互联网 发布:主机屋mysql数据库地址 编辑:程序博客网 时间:2024/06/04 19:40

野指针:

野指针指向一个已删除的对象或未申请访问受限内存区域的指针,该区域随时可能被系统再次分配。与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。


1.多个指针存储同一个内存地址的时候,free了其中一个指针造成的野指针

    int* test1 =  (int*)malloc(sizeof(int)*5);    memset(test1, 0, sizeof(int) * 5);    int* temp = test1;    free(test1);//       temp成为了一个野指针,    test1 = NULL;//      test1不能再被访问 Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1),如果没有该行代码,test1也是野指针


2.调用了free没有将指针置NULL


内存泄漏


1. 指针指向新的地址之前没有free之前申请的内存

(所谓指针指向某个变量,其实就是指针变量存储了该变量的起始地址)

int* p = malloc();p =  &q;//出现了内存泄漏



原创粉丝点击