是否应该明确释放由wcsdup分配的内存?

Abh*_*jit 2 c c++ windows posix

wcsdup这样的函数隐式调用malloc来为目标缓冲区分配内存.我想知道内存分配不是很明确,所以显然释放存储似乎是合乎逻辑的吗?这更像是一种设计困境,其原因和反对如下

应该被释放,因为

  1. 不释放它会导致内存泄漏.
  2. 有充分证据表明,即使从C++程序调用,wcsdup/_wcsdup也会调用malloc来分配内存.

不应该被释放,因为

  1. 当程序退出时,wcsdup累积的内存最终将被释放.在整个程序生命周期中,我们总是会遇到一些内存泄漏(除非我们大量调用大型缓冲区大小的wcsdup).
  2. 它可能会让人感到困惑,因为free之前没有明确的malloc.
  3. 由于它不是标准的一部分但符合posix,因此Microsoft实现可能不会使用malloc来分配目标缓冲区.

该方法应该是什么?

Rog*_*mbe 12

来自MSDN:

总是通过调用返回指针上的自由例程来释放这个内存是一种好习惯

从您链接的页面:

返回的指针可以传递给free()

它似乎相当明确:如果你关心内存泄漏,那么你应该通过使用释放内存free.

说实话,我很担心这种暗示的骑士态度:

在整个程序生命周期中,我们总是会遇到一些内存泄漏

泄漏记忆的很少有充分理由.即使您今天编写的代码是一次性的,并且它不是一个长期存在的过程,您是否可以确定某人不会将其复制并粘贴到其他程序中?

  • 实际上,如果所有在该程序中工作的开发人员对内存泄漏同样粗心大意,那么您将遇到麻烦. (2认同)