GCC的malloc属性如何正确使用?为何触发内存泄漏警告?
GCC malloc 属性使用错误导致分析器误报内存泄漏的原因
你重复使用了
malloc属性,这是核心问题。GCC的malloc属性语法规则是:要么用无参数的malloc(表示返回内存由标准free释放),要么用带参数的malloc(释放函数, 参数位置)指定自定义释放逻辑,不能同时声明两个malloc属性。你的属性声明
__attribute__((returns_nonnull, malloc, malloc(free_array_list, 1)))中,重复的malloc会让编译器分析器无法正确识别你指定的free_array_list作为对应释放函数,因此它判定safe_malloc分配的内存没有匹配的释放路径,触发误报。正确的属性写法应合并为:
__attribute__((returns_nonnull, malloc(free_array_list, 1)))另外你指定的参数位置
1是正确的,它表示new_array_list的返回值是free_array_list的第1个参数,但前提是属性声明格式正确。修正属性后,GCC分析器就能正确关联
new_array_list的返回值与free_array_list的释放逻辑,不会再误报safe_malloc的内存泄漏。
内容的提问来源于stack exchange,提问作者Knogger
相关产品推荐
相关产品推荐

