3 c memory-leaks memory-management
据我了解,strerror(errno)返回对应于错误的字符串形式errno。在这种情况下,我是否需要在使用完函数后释放函数的返回结果?
你不仅不需要;你不能。您可以传递的唯一内容free是指向您获得的内存的指针,malloc或者指定返回内存的函数,malloc或者“好像通过malloc”。的规范中没有这样的文本strerror,因此传递它返回的字符串free会产生未定义的行为。特别是,如果实现在malloc内部使用来获取内存,您将从它下面释放该内存,导致它执行释放后使用或双重释放,这是一些最危险的内存错误类型。
在实践中,strerror通常从 libc.rodata或mmapped 翻译文件中返回不可变的字符串,并且该错误很可能会立即被捕获为崩溃。
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |