自我引用结构中的指针类型不兼容警告,试图实现哈希表

时间:2019-05-16 16:53:01

标签: c pointers struct compiler-warnings

我正在尝试实现带有指向以C语言存储信息的双向链接的指针的哈希表。问题是我不断从编译器中收到我不明白为什么的警告。这些警告全都是“警告:来自不兼容指针类型的赋值”

这是我的结构:

typedef struct stru_contacto_list{
char *nome;
char *email;
char *telefone;
struct stru_contacto_list *prev, *next;
}contacto_list;




typedef struct stru_contacto{
contacto_list *info;
struct stru_contact *next_hash;
}contacto_hash;

typedef struct{
contacto_hash **val;
}hash_tableC;

这里有一些代码供您更好地理解正在发生的事情:

初始化哈希表

void initContactos(hash_tableC *c){
    int i;
    c->val = 
       (contacto_hash**)malloc(sizeof(contacto_hash)*DEFAULTSIZE);
    for(i = 0; i < DEFAULTSIZE; i++){
        c->val[i] = NULL;
    }
}

这是一些我从中获得警告的代码,此处我试图通过将“ contact_hash”添加到哈希表中,方法是将其放在与hash_table中的索引关联的链接列表的开头。

void addContact(){

    int index, flag;

    contacto_hash *novo = 
                    (contacto_hash*)malloc(sizeof(contacto_hash));

    contacto_list *novoL = 
                    (contacto_list*)malloc(sizeof(contacto_list));


    flag = addContactToList(novoL);

    if (flag){
        free(novo);
        return;
    }

    novo->info = novoL;
    novo->next_hash = NULL;

    index = hashing(novoL->nome);

    if (contactos->val[index] != NULL)
        novo->next_hash =  contactos->val[index]; /* THE WARNING*/
    contactos->val[index] = novo;

}

其他一些小代码,我得到相同的“警告:来自不兼容指针类型的赋值”:

contacto_hash* find(char *nome, int indice){
    /*Returns the previous contact_hash i want to find*/

    contacto_hash *atual, *prev;

    if (contactos->val[indice] == NULL)
        return NULL;

    atual = contactos->val[indice];
    prev = atual;

    while (atual != NULL) {
        if (strcmp(atual->info->nome, nome) == 0){
            return prev;
        }
        prev = atual;
        atual = atual->next_hash; /* THE WARNING */
    }
    return NULL;
}

来自编译器的警告是“警告:来自不兼容指针类型的赋值”

0 个答案:

没有答案