Splint在跟踪 C 代码中的内存泄漏方面做得很好。每个都malloc()
应该有一个匹配的free()
. 但是 BoehmGC 收集的代码使用GC_MALLOC()
没有匹配GC_FREE()
的 . 这使得 Splint 对大量实际上并不存在的内存泄漏消息发疯了。
有谁知道此类代码的正确注释,以便 Splint 不再显示虚假的内存泄漏消息?
特别是,有人可以注释维基百科的BoehmGC 示例吗?
#include <assert.h>
#include <stdio.h>
#include <gc.h>
int main(void)
{
int i;
GC_INIT();
for (i = 0; i < 10000000; ++i)
{
int **p = GC_MALLOC(sizeof(int *));
int *q = GC_MALLOC_ATOMIC(sizeof(int));
assert(*p == 0);
*p = GC_REALLOC(q, 2 * sizeof(int));
if (i % 100000 == 0)
printf("Heap size = %zu\n", GC_get_heap_size());
}
return 0;
}