首页 > 解决方案 > 我需要在 C 中释放 strerror() 的结果吗?

问题描述

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

标签: cmemory-managementmemory-leaks

解决方案


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

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


推荐阅读