【问题标题】:Do I need to free the result of strerror() in C?我需要在 C 中释放 strerror() 的结果吗?
【发布时间】:2020-09-28 01:13:11
【问题描述】:

据我了解,strerror(errno) 返回与errno 对应的错误的字符串形式。这种情况下,函数的返回结果是否需要在我用完后释放?

【问题讨论】:

标签: c memory-management memory-leaks


【解决方案1】:

你不仅不需要;您不得。您可以传递给free 的唯一内容是指向您通过malloc 获得的内存的指针,或指定返回通过malloc 获得的内存的函数或“如同malloc”获得的内存。 strerror 的规范中没有这样的文本,因此将它返回的字符串传递给 free 会产生未定义的行为。特别是,如果实现在内部使用malloc 来获取内存,那么您将从它下面释放该内存,导致它执行释放后使用或双重释放,这是一些最危险的类型内存错误。

在实践中,strerror 通常会从 libc .rodatammapped 翻译文件返回不可变字符串,并且该错误很可能会立即被捕获为崩溃。

【讨论】:

    【解决方案2】:

    strerror 的返回值不需要需要被释放。它通常指向只读字符串或静态缓冲区。因此,这个函数不被认为是线程安全的。

    有一个名为strerror_r 的相关函数,它获取用户指定的缓冲区及其大小,并用错误消息填充缓冲区。这个函数是线程安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多