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

标签 c memory-management memory-leaks

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

最佳答案

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

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

关于c - 我需要在 C 中释放 strerror() 的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62272781/

相关文章:

在 C 中为 malloc 和 free 创建一个包装函数

c - IP_RECVDSTADDR 未定义

c - 为什么#define 不需要分号?

c - 重新分配和释放原因 "double free or corruption"

windows - Visual Studio 2010——如何减少其内存占用

c++ - 从 Fortran : How to deal with Dynamic memory allocation? 调用的子例程 C++

c++ - 我可以使用 C++ 中的内置类型安全地新建 [],然后转换指针,然后删除 [] 吗?

java - 静态对象(例如单例)会泄漏非静态上下文吗?为什么?

c - 尝试在单个程序中打印字符、以空格结尾的字符串和以换行符结尾的字符串

java - 线程将随着时间的推移而更新,以尝试避免可能的内存泄漏