2016-11-25 5 views
1

J'ai une struct que j'initialisés = NULL ici:erreur: opérandes invalides à l'expression binaire

void inicializa(tabelaHash **tabela, int tamanhoTabela) { 
    int i; 
    for(i = 0; i < tamanhoTabela; i++) { 
     inicializaArvore(&tabela[i]); 
    } 

Mon problème est que, quand je teste si cela a fonctionné, avec « si (tabela [i] == NULL) ... "sur une fonction comme celle que j'ai mentionnée ou toute autre qui a besoin d'un" ** tabela ", ça fonctionne très bien, mais, quand je le fais sur ma main, ça me donne cette erreur:

main.c:129:16: error: invalid operands to binary expression ('tabelaHash' 
    (aka 'struct sbb') and 'void *') 
      if(tabela[k] == NULL) 
       ~~~~~~~~~^~~~~ 

la ligne qui obtient cette erreur est juste:

for (k = 0; k < tamanhoTabela; k++) { 
    129->if(tabela[k] == NULL) 
     printf("funcionou"); 
} 

tabela est une table de hachage des arbres binaires, tabelaHash est un SBB struct (SBB est une sorte d'arbre binaire défini comme suit:

struct sbb { 
tipoItem reg; //that is the information it holds 
struct sbb *esq; // left pointer 
struct sbb *dir; // right pointer 
int esquipo; // if it is a vertical or horizontal pointer to the left 
int dirtipo; // if it is a vertical or horizontal pointer to the right 

};

Je veux avoir un pointeur qui pointe vers la racine de chaque arbre sur le « tabela [i] », donc je malloc comme suit:

tabelaHash *tabela; 
tabela = malloc(tamanhoTabela * sizeof(tabelaHash*)); 

Comment puis-je tester si tabela [i ] est toujours NULL sur mon principal?

edit: Je ne sais pas si cela aide, mais je viens de réaliser que je ne peux utiliser le "if (tabela [i] == NULL)" sur une fonction que si la fonction appelle un "tabelaHash **". Si je demande un "tabelaHash *", cela me fait la même erreur.

+0

Vous avez donné plusieurs fragments de code disjoints qui ne présentent pas vraiment une image complète de votre problème, ni, d'ailleurs, de votre question. Nous préférons généralement voir un [mcve] démontrer le problème et servir de contexte pour «comment améliorer/réparer/étendre ceci». Vous obtiendrez de meilleures réponses de cette façon. –

+0

Comment 'tabelaHash' est-il défini? – alk

+0

En outre, ce '... sizeof (tabelaHash *)' est probablement probablement faux. Cela devrait être '... sizeof (tabelaHash)' ou mieux encore ... sizeof * tabela'. – alk

Répondre

1

Votre pointeur tabela n'est qu'un seul pointeur. En tant que tel lorsque vous faites tabela[k] il obtient le k'th tabela dans le "tableau" des tables. Le résultat de tabela[k] est donc un tabelaHash, qui n'est pas un pointeur et ne peut donc pas être brut comparé à NULL.

Vous avez voulu écrire tabelaHash **tabela; à la place ...