如何解决如何使扫描构建遵循 __attribute__((cleanup))?
我有一个(可笑的)简单程序,它使用 Clang(或 GCC)的 __attribute__((cleanup))
机制自动释放内存:
#include <stdio.h>
#include <stdlib.h>
void free_memory(void * mem) {
void ** actual = (void**) mem;
printf("freeing %p\n",*actual);
free(*actual);
}
#define autofree __attribute__((cleanup(free_memory)))
int main(int argc,char ** argv) {
autofree char * str = calloc(51,sizeof(*str));
printf("str lives at %p\n",str);
return 0;
}
编译时(仅使用 clang file.c
),free_memory
似乎按预期调用:
$ ./a.out
str lives at 0x1e2b2a0
freeing 0x1e2b2a0
然而,scan-build
仍然报告潜在的泄漏:
$ export CC=clang
$ scan-build $CC test.c
file.c:15:5: warning: Potential leak of memory pointed to by 'str' [unix.Malloc]
return 0;
^~~~~~~~
我能做些什么来完全抑制这个误报,或者让 scan-build
跟随 __attribute__((cleanup))
到 free
调用? >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。