gaa*_*kam 3 c malloc free undefined-behavior language-lawyer
来自http://en.cppreference.com/w/c/memory/malloc:
必须使用free()或realloc()释放返回的指针.
来自http://en.cppreference.com/w/c/memory/calloc:
必须使用free()或realloc()释放返回的指针.
严格来说,为什么必须取消分配返回的指针?
现在我知道POSIX要求在程序终止时释放内存,所以在实践中malloc立即调用和终止不会造成任何伤害.但这不是我要问的问题.
这个硬性要求("必须被解除分配")存在于C标准中,或者这是cppreference贡献者的发明,是为了敦促程序员不要泄漏内存?如果标准中存在这样的硬性要求,这是否意味着,根据C标准(POSIX和其他OS相关的事情除外!),如果返回的指针malloc不是free'd,或者是标准,则程序是UB 定义未能满足此要求的后果?(这会特别有趣,因为这可能意味着标准处理程序已经终止时会发生什么!)
当他们在cppreference.com上说"返回的指针必须被释放"时,他们并不意味着程序员必须这样做.这意味着"当分配的内存被释放时,必须使用free或realloc完成,因为只有那些函数才能正确执行." 在实际规范中没有这样的命令.
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |