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;
}