像wcsdup这样的函数隐式调用malloc来为目标缓冲区分配内存。我想知道内存分配不是很明确,所以显然释放存储似乎是合乎逻辑的吗? 这更像是一种设计困境,其原因和反对如下
应该被释放,因为
不应该被释放,因为
该方法应该是什么?
答案 0 :(得分:12)
来自MSDN:
总是通过调用返回指针上的自由例程来释放这个内存是好的做法
从您关联的页面:
返回的指针可以传递给free()
看起来相当明确:如果你关心内存泄漏,那么你应该使用free
释放内存。
说实话,我很担心这种暗示的骑士态度:
在整个程序生命周期中,我们总是会遇到一些内存泄漏
泄漏记忆的原因很少。即使您今天编写的代码是一次性的,并且它不是一个长期存在的过程,您是否可以确定某人不会将其复制并粘贴到其他程序中?
答案 1 :(得分:2)
是的,当你完成使用它时你应该总是释放堆分配的内存,并且知道它是安全的。您链接到甚至州的文档:
对于通过malloc()分配内存的函数,应用程序 应该在呼叫不再需要时释放这样的内存 自由()。对于wcsdup(),这是返回值。
如果您担心免费可能会造成混淆,请发表评论解释。说实话,这似乎是多余的;当一个指针被显式释放,它被释放它的代码“拥有”时很明显,任何困惑的人都可以轻松查找wcsdup
文档。
此外,您的程序中应该永远不会出现内存泄漏。在实践中,一些程序确实存在内存泄漏,但这并不意味着它们可以存在。另请注意,仅仅因为您为程序的整个生命周期分配了一块内存,如果您在整个持续时间内仍在使用它,则它不会泄露内存。
答案 2 :(得分:0)
从您自己的链接:
对于像malloc()一样分配内存的函数,当调用free()不再需要时,应用程序应该释放这样的内存。
来自MSDN:
_strdup函数调用malloc为strSource的副本分配存储空间,然后将strSource复制到分配的空间。
和strdup从MSVC 2005中弃用,并调用它调用_strdup,因此它使用malloc