如何正确理解c语言free(NULL)
1、通常的做法,我们在释放内存指针之前,都会先判断指针是否为NULL。如果不为NULL,则再调用free。如下是一个常见的例子:
2、执行命令man malloc,查看linux帮助文件,找到free函数的说明。free函数用来释放通过malloc,realloc,c锾攒揉敫alloc申请的内存指针。对于释放其他类型的指针或者重复释放指针的行为,没有明确的定义,通常都会引起严重问题。特别重要的是最后一句:如果指针参数是NULL,操作不做任何事,直接返回。
3、所以释放指针之前可以不必进行NULL判断。我们重写示例程序,并重新执行后,程序运行正常。
4、但free函数明确了重复释放指针是未定义的行为,所以上面的例子也是有问题的。为了不重复释放指针,我们在对指针进行free操作后,需要对指针进行赋值为NULL操作。
5、free函数还明确释放其他指针也是未定义的行为。这里的指针可能包括字符数组指针、数值指针等,所以我们在执行free之前,编写代洁船诼抨码需要明确指针为malloc,realloc,calloc返回的指针。如下示例中:有些编译器也会对这种行为提出警告!所以处理编译告警也是必要的。
6、综上,查找free函数说明文档,正确的free用法应该是: free直接释放内存申请返回的指针,在执行free函数之后对指针重新赋值为NULL。这样的效果:1. 省略指针判断,减少程序判断逻辑,甚至可以减少程序中括号嵌套层数2. 重新赋值为NULL后,可以避免重复释放
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:52
阅读量:75
阅读量:58
阅读量:29
阅读量:84