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

问题描述 投票:0回答:2

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

c memory-management memory-leaks
2个回答
4
投票

不仅您不是需要;您必须。唯一可以传递给free的东西是指向malloc获得的内存的指针,或者是指定返回malloc或“好像malloc获得”的函数的函数。 strerror的规范中没有这样的文本,因此将返回的字符串传递给free会产生不确定的行为。特别是,如果实现在内部使用malloc来获取内存,则您将从该内存中释放该内存,从而导致该内存执行“先释放后使用”或“两次释放”操作,这是一些最危险的类型内存错误。

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


1
投票

strerror的返回值确实不是需要释放。它通常指向只读字符串或静态缓冲区。因此,此功能不被认为是线程安全的。

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

© www.soinside.com 2019 - 2024. All rights reserved.