Judy Array judysl(3)奇怪的行为

时间:2011-11-26 13:16:39

标签: c arrays data-structures

我正在ubuntu 11.10“libjudy-dev”上测试judy数组实现。

我遇到了一个奇怪的行为,可能是错误。与val和钥匙的大小有关。

在这个例子中,如果我使用struct TEST只有1个带有大键的int,但是如果我使用10个int结构并且它没有相同的键,则10个int结构可以正常使用小键。 / p>

judy manpage

在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;
}

1 个答案:

答案 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大。

道格巴斯金斯