我想使用 libjudy 构建一些数据结构来存储以固定长度字节数组为键的信息,这意味着我需要使用 JudyHS 结构。根据我对代码和文档的理解,键只能访问由单个机器字组成的元素,这很好,因为我想保存指向在堆上分配的结构的指针;但是,存在一个问题,似乎没有办法遍历先前存储的元素,并且用于释放结构的宏 (JHSFA) 在用于存储数据字的内存上调用 free(),但是没有提供允许调用代码释放单词指向的内存的机制。我验证了 JHSFA 不会使用 valgrind 和以下示例代码取消分配用户提供的内存:
#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 用户能否指出一种避免内存泄漏的方法?