free()函数在头文件malloc.h中有相关的声明。其原型是:void free(void *ptr);其作用是用来释放malloc向系统申请的内存。
文章主要对free()作用于指针后的一些后续性的一些说明。希望能帮助到大家了解free()更深层次的一些问题!
这里我提出一个观点是:用free()函数来释放了malloc()申请的内存之后,只是其内容被清空了并且程序不再拥有这段内存的使用权,但是其指针还是指向这块内存!
我用一个程序片段来说明:
void
test( 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()
之后还要把指针指向NULL;其作用就是为了防止野指针的出现。野指针就是说指向了一块并不属于你的内存的指
针。
所以这里也可以看出free()的一些内在的缺陷。它并不能完全的防止错误的读操作。
措施是每次我们用完free()之后都要将ptr在指向NULL;或者你可以重写一个free()。然后将它在放回gcc的include这个文件里面。