从http://en.cppreference.com/w/c/memory/malloc:严格来说,C标准是否要求在malloc之后必须调用free,以及在不满足此要求时规定了什么?
返回的指针必须用免费被解除分配()或realloc()。
从http://en.cppreference.com/w/c/memory/calloc:
返回的指针必须用免费被解除分配()或realloc()。
严格地说,为什么必须返回指针被释放?
现在我知道POSIX强制内存将在程序终止时被释放,所以在实践中调用malloc
并立即终止不会造成任何伤害。但这不是我所问的。
这是硬要求(“必须被解除分配”)存在于C标准,或这是cppreference贡献者的发明,督促程序员不泄漏存储器?如果这样的硬性要求是存在于标准,这是否意味着,按照C标准(POSIX和其他操作系统相关的东西放在一边!),该计划是UB如果malloc
返回的指针不是free
“d,或做该标准是否定义了未能达到这一要求的后果? (这将是特别有趣,因为这可能意味着标准涉及当程序已经终止会发生什么!)
在某些应用程序中,永不终止的嵌入式应用程序,可能是您调用malloc(),但永远不会释放()以构建将永久生存的内部数据结构,或者直到有人拉动电源线。所以在这种情况下,完成_requirement_来释放分配的内存块是不可能的。 – user1048576
我一直在阅读这个语句,如下所述:“如果你想释放内存,你必须使用'free()'或'realloc ()'”。 –
我认为重点不在于“必须”,而在于“自由”。当该块被释放时,必须使用“free”功能。 –