2016-11-25 4 views
1

Ich habe eine Struktur, welche I = hier NULL initialisiert:Fehler: ungültige Operanden Binärausdruck

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

Mein Problem ist, dass, wenn ich testen, ob es funktioniert, mit „if (tabela [i] == NULL) ... "auf einer Funktion als die, die ich erwähnte oder andere, die eine" ** Tabela "benötigt, funktioniert es ganz gut, aber, wenn ich es auf meinem Haupt mache, bekommt es mir diesen Fehler:

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

die Linie, die diesen Fehler bekommt gerade:

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

tabela eine Hash-Tabelle von binären Bäumen, tabelaHash ein struct SBB (SBB ist eine Art von Binärbaum wie folgt definiert:

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 

};

Ich möchte einen Zeiger haben, die auf dem "tabela [i]" an der Wurzel jedes Baumes Punkte, so dass ich malloc'ed wie folgt:

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

Wie kann ich testen, ob tabela [i ] ist immer noch NULL auf meinem Haupt?

edit: Ich weiß nicht, ob das hilft, aber ich habe gerade festgestellt, dass ich das "if (tabela [i] == NULL)" nur für eine Funktion verwenden kann, wenn die Funktion nach a verlangt "tabelaHash **". Wenn ich nach einem "tabelaHash *" rufe, dann bekomme ich denselben Fehler.

+0

Sie haben mehrere disjunkte Codefragmente gegeben, die nicht wirklich ein vollständiges Bild von Ihrem Problem darstellen, noch, in der Tat, Ihrer Frage. Wir ziehen es im Allgemeinen vor, ein [mcve] zu sehen, das das Problem demonstriert und als Kontext für "Wie verbessere/fixiere/erweitere ich dies" -Fragen dient. Sie werden auf diese Weise bessere Antworten bekommen. –

+0

Wie wird 'tabelaHash' definiert? – alk

+0

Auch dieses '... sizeof (tabelaHash *)' ist meistens wahrscheinlich falsch. Es sollte "... sizeof (tabelaHash)" oder besser "... sizeof * tabela" sein. – alk

Antwort

1

Ihr tabela Zeiger ist nur ein einzelner Zeiger. Als solche, wenn Sie tabela[k] tun, bekommt es die k'th tabela im "Array" von Tabellen. Das Ergebnis von tabela[k] ist also ein tabelaHash, welches kein Zeiger ist und somit nicht roh gegen NULL verglichen werden kann.

Sie haben vielleicht tabelaHash **tabela; statt schreiben wollte ...

Verwandte Themen