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

3 c memory-leaks memory-management

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

R..*_*R.. 6

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

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