Vij*_*jay 106 c free null pointers
从理论上讲,我可以这么说
free(ptr);
free(ptr);
Run Code Online (Sandbox Code Playgroud)
是一个内存损坏,因为我们释放已经释放的内存.
但是如果
free(ptr);
ptr=NULL;
free(ptr);
Run Code Online (Sandbox Code Playgroud)
由于操作系统将以不确定的方式运行,我无法对此进行实际的理论分析.无论我在做什么,这种记忆是否会腐败?
释放空指针有效吗?
Gre*_*osz 212
7.20.3.2
free功能概要
Run Code Online (Sandbox Code Playgroud)#include <stdlib.h> void free(void *ptr);描述
该
free函数使得指向的空间ptr被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.
话虽这么说,当你在野外查看不同的代码库时,你会注意到人们有时会这样做:
if (ptr)
free(ptr);
Run Code Online (Sandbox Code Playgroud)
这是因为一些C运行时(我肯定记得在PalmOS上就是这种情况)在释放NULL指针时会崩溃.
但是现在,我认为free(NULL)根据标准的指示,假设是一个nop是安全的.
R S*_*hko 21
所有符合标准的C库版本都将free(NULL)视为no-op.
也就是说,曾经有一些版本的免费版本会免费崩溃(NULL),这就是为什么你会看到一些防御性编程技巧的建议:
if (ptr != NULL)
free(ptr);
Run Code Online (Sandbox Code Playgroud)
小智 10
我记得在PalmOS上工作过free(NULL).
free(ptr);
ptr=NULL;
free(ptr);/*This is perfectly safe */
Run Code Online (Sandbox Code Playgroud)
您可以安全地删除NULL指针.在这种情况下不会执行任何操作.换句话说,free()对NULL指针不执行任何操作.
推荐用法:
free(ptr);
ptr = NULL;
Run Code Online (Sandbox Code Playgroud)
看到:
man free
The free() function deallocates the memory allocation pointed to by ptr.
If ptr is a NULL pointer, no operation is performed.
Run Code Online (Sandbox Code Playgroud)
将指针设置为NULL之后free(),可以free()再次调用它并且不执行任何操作.
free(NULL)在C语言中是完全合法的,delete (void *)0并且delete[] (void *)0在C++中是合法的.
顺便说一下,释放内存两次通常会导致某种运行时错误,所以它不会破坏任何东西.
| 归档时间: |
|
| 查看次数: |
66490 次 |
| 最近记录: |