我是否需要在 C 中释放 strerror() 的结果?

Do I need to free the result of strerror() in C?

据我理解,strerror(errno) returns errno 对应的错误的字符串形式。那样的话,函数的返回结果是否需要在使用完后释放?

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

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

你不仅不需要;你一定不能。您可以传递给 free 的唯一东西是指向您通过 malloc 获得的内存的指针或指定给 return 内存的函数的指针,这些内存通过 malloc 或 "as if by malloc" 获得。 strerror 的规范中没有这样的文本,因此将字符串 it returns 传递给 free 会产生未定义的行为。特别是,如果实现在内部使用 malloc 来获取内存,您将释放内存,导致它执行释放后使用或双重释放,这是一些最危险的内存错误的类型。

实际上,strerror 通常 returns 来自 libc .rodata 或来自 mmapped 翻译文件的不可变字符串,并且很可能会立即出现错误撞车了。