gpt4 book ai didi

c++ - wcsdup 分配的内存是否应该显式释放?

转载 作者:可可西里 更新时间:2023-11-01 09:39:47 27 4
gpt4 key购买 nike

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

应该被释放因为

  1. 不释放它会导致内存泄漏。
  2. 有据可查的是,wcsdup/_wcsdup 调用 malloc 来分配内存,即使它是从 C++ 程序调用的。

不应被释放,因为

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

应该采用什么方法?

最佳答案

来自 MSDN :

it is good practice always to release this memory by calling the free routine on the pointer returned

从您链接的页面:

The returned pointer can be passed to free()

这看起来相当明确:如果您关心内存泄漏,那么您应该使用 free 释放内存。

老实说,我担心这暗示的傲慢态度:

We always live with some memory leaks through out the program lifetime

泄漏内存的理由很少。即使您今天编写的代码是一次性的,并且不是长期存在的过程,您能确定不会有人将其复制并粘贴到其他程序中吗?

关于c++ - wcsdup 分配的内存是否应该显式释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com