Tai*_*man 24 c free memory-management
呼叫可以free()以任何方式失败吗?
例如:
free(NULL);
Run Code Online (Sandbox Code Playgroud)
E.B*_*oît 32
释放NULL指针不会失败.并且free不会返回任何错误,但释放未分配的内存,已释放的内存或已分配的块的中间是未定义的行为 - 它可能会导致内存错误,程序可能会中止(或者更糟糕的是,它会破坏堆结构并崩溃后来).
或者,甚至更糟糕的是,继续运行但是完全破坏了您的数据并将其写入磁盘而您没有意识到:-)
标准的相关部分(C99)是部分7.20.3.2:
#include <stdlib.h>
void free(void *ptr);该
free函数使得指向的空间ptr被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果该参数不匹配的指针早些时候返回calloc,malloc或realloc功能,或如果空间已释放通过调用free或者realloc,该行为是不确定的.该
free函数不返回任何值.
free(NULL)什么也没做; free上不与相同分配器(分配的指针malloc,calloc等等)或者已经释放是不确定的.自从free返回以来void,它失败的唯一方法就是崩溃(例如段错误).
| 归档时间: |
|
| 查看次数: |
10971 次 |
| 最近记录: |