关于free()函数的一些说明

来源:互联网 发布:淘宝办电工证是真的吗 编辑:程序博客网 时间:2024/06/11 15:34

          free()函数在头文件malloc.h中有相关的声明。其原型是:void free(void *ptr);其作用是用来释放malloc向系统申请的内存。

文章主要对free()作用于指针后的一些后续性的一些说明。希望能帮助到大家了解free()更深层次的一些问题!


这里我提出一个观点是:用free()函数来释放了malloc()申请的内存之后,只是其内容被清空了并且程序不再拥有这段内存的使用权,但是其指针还是指向这块内存!

我用一个程序片段来说明:

voidtest( void ){     int *ptr  = malloc( sizeof( int ) );     *ptr = 100000;     printf(" ptr的地址是0x%x  内容是%d\n",ptr,*ptr);     free(ptr);     printf("释放之后ptr的地址是0x%x\n",ptr);     //这里不能读取ptr的内容因为已经被释放     }


      通过这段测试代码可以看出即使用free()来释放ptr之后ptr的指向依然是没有改变的,就是它指向那块内存就是     

向那块内存。只不过那块内存的使用权已经不归你程序所有而已。看到这里我想读者现在就能够明白为什么free()

之后还要把指针指向NULL;其作用就是为了防止野指针的出现。野指针就是说指向了一块并不属于你的内存的指

针。

所以这里也可以看出free()的一些内在的缺陷。它并不能完全的防止错误的读操作。

措施是每次我们用完free()之后都要将ptr在指向NULL;或者你可以重写一个free()。然后将它在放回gcc的include这个文件里面。



0 0
原创粉丝点击