我正在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/

10-12 21:51