我正在ubuntu 11.10“libjudy-dev”上测试judy数组实现。
我遇到了一个奇怪的行为,可能是错误。与val和钥匙的大小有关。
在这个例子中,如果我使用struct TEST只有1个带有大键的int,但是如果我使用10个int结构并且它没有相同的键,则10个int结构可以正常使用小键。 / p>
在man页面中说字符串可以是任意大小。
#include <stdio.h>
#include <string.h>
#include <Judy.h>
/*struct TEST {
unsigned int size9;
};*/
struct TEST {
unsigned int size0;
unsigned int size1;
unsigned int size2;
unsigned int size3;
unsigned int size4;
unsigned int size5;
unsigned int size6;
unsigned int size7;
unsigned int size8;
unsigned int size9;
};
int main()
{
struct TEST *val;
char key[1024];
Pvoid_t array = NULL;
//strcpy(key, "0123456789_0123456789");
strcpy(key, "0123456789_0123456789_0123456789");
JSLI(val, array, key);
val->size9 = 10;
val = NULL;
JSLG(val, array, key);
if(val == NULL) {
printf("NULL\n");
} else {
printf("%u\n", val->size9);
}
return 0;
}
答案 0 :(得分:2)
JudySL将字符串“映射”到RAM中的单词。该单词用作“word_t”或“指向更多内存的指针”。例程返回(在您的情况下为val)指向可供您使用的单词的指针。
您的代码使指针(val)成为指向大于一个单词的结构的指针 - 因此 使用语句“val-&gt; size9 = 10;”销毁内部Judy数据结构的一部分。 请记住,“key”是一个字符串,而PValue是一个指向size字对象的指针。如果你想* PValue指向struct TEST并且它大于word_t那么必须为它分配内存。您的测试程序似乎想要将字符串映射到struct TEST-- struct TEST比word_t大。
道格巴斯金斯