Judy Array Judysl (3) странное поведение - PullRequest
1 голос
/ 26 ноября 2011

Я тестирую реализацию массивов Judy в Ubuntu 11.10 "libjudy-dev".

У меня странное поведение, возможная ошибка.относится к размеру val и ключа.

В этом примере, если я использую структуру TEST только с 1 int с большими ключами, то работает, но если я использую структуру 10 int с тем же ключом, это не 't, структура 10 int работает нормально с маленькими ключами.

страница руководства Джуди

На странице руководства сказано, что строка может быть любого размера.

#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 Ответ

2 голосов
/ 07 декабря 2011

JudySL "отображает" строку на слово в оперативной памяти.Это слово используется как «word_t» или «указатель на больше памяти».Процедуры возвращают (val в вашем случае) указатель на слово, доступное для вашего использования.

Ваш код делает этот указатель (val) указателем на структуру большего размера, чем одно слово - таким образом, уничтожая частьвнутренняя структура данных Judy с утверждением «val-> size9 = 10;».Имейте в виду, что «ключ» - это строка, а PValue - указатель на объект размера word.Если вы хотите, чтобы * PValue указывал на struct TEST, и он больше, чем word_t, тогда для него должна быть выделена память.Кажется, ваша тестовая программа хочет отобразить строку в struct TEST - struct TEST больше, чем word_t.

Doug Baskins

...