我正在ubuntu 11.10“libjudy dev”上测试judy数组的实现。
我遇到了一个奇怪的行为,可能是虫子。与val的大小和密钥有关。
在本例中,如果只使用带大键的1 In t的struct测试,但如果使用带同一个键的10 int结构,则不能使用带小键的10 int结构。
judy manpage
在手册页上说,字符串可以是任何大小。
#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;
}
最佳答案
JudySL把一个字符串“映射”到RAM中的一个单词。这个词被用作“单词”或“指向更多内存的指针”。例程返回(在您的情况下为val)一个指向可供您使用的单词的指针。
您的代码使该指针(val)成为指向大于一个字的结构的指针,因此
使用语句“val->size9=10;”销毁内部Judy数据结构的一部分。
请记住,“key”是一个字符串,PValue是一个指向单词大小的对象的指针。如果您希望*PValue指向struct TEST并且它大于一个单词,那么必须为它分配内存。您的测试程序似乎要将字符串映射到结构测试--
结构测试大于单词。
道格·巴斯金斯
关于c - Judy Array judysl(3)奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8278642/