严格来说,C标准是否要求必须在malloc之后调用free以及在不满足此要求时它会规定什么?

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 定义未能满足此要求的后果?(这会特别有趣,因为这可能意味着标准处理程序已经终止时会发生什么!)

mni*_*tic 7

当他们在cppreference.com上说"返回的指针必须被释放"时,他们并不意味着程序员必须这样做.这意味着"当分配的内存被释放时,必须使用free或realloc完成,因为只有那些函数才能正确执行." 在实际规范中没有这样的命令.