据我理解,strerror(errno)返回与errno对应的错误的字符串形式。在这种情况下,一旦我使用完函数,是否需要释放函数返回的结果?
发布于 2020-06-09 00:10:11
您不仅不需要这样做,而且您也不能使用。唯一可以传递给free的东西是指向由malloc获得的内存的指针,或者指定返回由malloc获得的内存的函数或“似乎由malloc获得的”。strerror规范中没有这样的文本,因此将它返回的字符串传递给free会产生未定义的行为。特别是,如果实现在内部使用malloc来获得内存,那么您就会将该内存从其下面释放出来,从而使其执行“事后使用”或“双释放”,这是一些最危险的内存错误类型。
在实践中,strerror通常从libc .rodata或mmapped翻译文件中返回不可变的字符串,并且很可能会立即将错误捕获为崩溃。
发布于 2020-06-08 23:40:14
需要释放strerror的返回值而不是。它通常指向只读字符串或静态缓冲区.因此,这个函数不被认为是线程安全的。
有一个名为strerror_r的相关函数,它接受用户指定的缓冲区及其大小,并将错误消息填充缓冲区。此函数是线程安全的。
https://stackoverflow.com/questions/62272781
复制相似问题