首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要释放C中strerror()的结果?

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

Stack Overflow用户
提问于 2020-06-08 23:34:21
回答 2查看 849关注 0票数 4

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-09 00:10:11

您不仅不需要这样做,而且您也不能使用。唯一可以传递给free的东西是指向由malloc获得的内存的指针,或者指定返回由malloc获得的内存的函数或“似乎由malloc获得的”。strerror规范中没有这样的文本,因此将它返回的字符串传递给free会产生未定义的行为。特别是,如果实现在内部使用malloc来获得内存,那么您就会将该内存从其下面释放出来,从而使其执行“事后使用”或“双释放”,这是一些最危险的内存错误类型。

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

票数 7
EN

Stack Overflow用户

发布于 2020-06-08 23:40:14

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62272781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档