libjudy を使用して、固定長のバイト配列をキーとする情報を格納するデータ構造を構築したいと考えています。つまり、JudyHS 構造を使用する必要があります。コードとドキュメントの私の理解に基づいて、キーは単一の機械語で構成される要素にのみアクセスできます。ヒープに割り当てられた構造体へのポインターを保存したいので、これは問題ありません。ただし、以前に格納された要素を反復する方法がないように見えるという問題があり、構造体 (JHSFA) の割り当てを解除するために使用されるマクロは、データの単語を格納するために使用されるメモリで free() を呼び出しますが、ワードが指すメモリを呼び出し元のコードが解放できるようにするメカニズムは提供されません。valgrind と次のサンプル コードを使用して、JHSFA がユーザー提供のメモリの割り当てを解除しないことを確認しました。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <judy.h>
int
main(
const int argc,
const char *argv[]
)
{
Pvoid_t table = (PWord_t)NULL;
const size_t allocSize = sizeof("bar") + 1;
char *bar = calloc(1, allocSize);
strncpy(bar, "bar", allocSize);
uint64_t key = UINT32_MAX + 1;
PWord_t entry;
JHSI(entry, table, &key, sizeof(key));
*entry = (Word_t)bar;
entry = NULL;
JHSG(entry, table, &key, sizeof(key));
if (!strncmp(bar, (const char *)(*entry), allocSize)) {
printf("match\n");
}
else {
printf("no match\n");
}
Word_t result;
JHSFA(result, table);
}
これが事実であることを考えると、このデータ構造がデータを保存する唯一の場所である場合、他のlibjudyユーザーがメモリリークを回避する方法を教えてくれますか?