Почему моя главная таблица сбрасывается при передаче в функцию? - PullRequest
2 голосов
/ 06 июня 2019

Я реализую хеш-таблицу, которая должна хранить указатели на связанный список узлов, содержащих слова и их переводы на конкретный язык.

Для этого я читаю из текстового файла слова,загрузить их в узлы, хешировать их и вставить в таблицу.В конце функции init я вижу таблицу, правильно инициализированную через ddd.Однако при вызове следующей функции в main и передаче таблицы она фактически отправляет только указатель на пустой узел вместо таблицы.Куда это делось?Изменился ли его адрес?Создается ли новый указатель при передаче в функцию?

//main.c

//Cellule definition
typedef struct cellule{
    char * mot;
    char * trad;
    struct cellule * suiv;
}cellule_t;

//Init and Search

cellule_t * rechercheTable(cellule_t ** tab, const char * mot){
    int ind=hash_string(mot);
    cellule_t * cour = tab[ind];
    bool trouve=false;

    while(cour!=NULL && trouve==false){
        if(cour->mot==mot){
            trouve=true;
        }
        else cour=cour->suiv;
    }
    return cour;
}

void initTable(cellule_t ** t){
    FILE    *   fichier;
    cellule_t *cour;
    char ligne[60];
    char * sep;
    int i,ind;

    for(i=0;i<HASH_MAX;i++){
        t[i]=NULL;
    }

    fichier = fopen("anglais.txt","r");
    if(fichier)
    {
        fscanf(fichier,"%s",ligne);
        while(!feof(fichier))
        {
                cour=(cellule_t *)malloc(sizeof(cellule_t));

                sep=strtok(ligne,";");
                cour->mot=(char *)malloc(sizeof(char)*(((int)strlen(sep))+1));          
                if(sep!=NULL)
                strcpy(cour->mot,sep);
                ind=hash_string(sep);

                sep=strtok(NULL,"\n");
                if(sep!=NULL){
                    cour->trad=(char *)malloc(sizeof(char)*(((int)strlen(sep))+1));
                    strcpy(cour->trad,sep);
                }
                cour->suiv=t[ind];
                t[ind]=cour;
                fscanf(fichier,"%s",ligne);
        }
        fclose(fichier);
    }
}

int main(){
    cellule_t * tableMajeure[HASH_MAX];
    cellule_t * cour;
    initTable(tableMajeure);
    cour = rechercheTable(tableMajeure,"hello");
    printf("Resultat de la recherche de hello : %s \n",cour->mot);
    return 0;
}

Tl; dr: почему tableMajeure прекрасно получается из Init, но передается пустым в Recherche?Спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...