2016-11-25 19 views
1

私は私がここに= NULLを初期化し、構造体を持っている:エラー:バイナリ式に無効なオペランド

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

私の問題があれば「と(tabela [i]を==、それが働いていた場合、私がテストしたときに、ということですNULL ")..."私が言及したような関数、または "** tabela"を必要とする他の関数では、うまくいきますが、私の主なことでこのエラーが発生します:

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

このエラーを取得する行だけです:

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

tabelaバイナリツリーのハッシュテーブルであり、tabelaHashは、SBBは、以下のように定義される二分木の一種である(構造体SB​​Bある:

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 

}。

私は「tabela [i]を」上の各ツリーのルートを指すポインタを持つようにしたいので、次のように、私はmallocを:

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

tabela場合、私はテストするにはどうすればよい[I ]私のメインではまだNULLですか?

編集:私はそれが助けになるかどうか分かりませんが、私は関数に "if(tabela [i] == NULL)"を使うことができます。 "tabelaHash **"。私が "tabelaHash *"を呼び出すと、同じエラーが表示されます。

+0

あなたは本当にあなたの質問で、確かに、あなたの問題の全体像を提示し、またしていないいくつかの互いに素コードの断片を与えてくれました。私たちは一般的に問題を実証し、「改善する/修正する/これをどのように拡張するのか」という質問のコンテキストとして役立つ[mcve]を見ることを好む。あなたはそのようにより良い答えを得るでしょう。 –

+0

'tabelaHash'はどのように定義されていますか? – alk

+0

また、この '... sizeof(tabelaHash *)'は主に間違っている可能性があります。それは '... sizeof(tabelaHash)'またはもっと良い '... sizeof * tabela'でなければなりません。 – alk

答えて

1

tabelaポインタは1つのポインタに過ぎません。したがって、tabela[k]を実行すると、テーブルの「配列」内にk番目のtabelaが得られます。したがって、tabela[k]の結果はtabelaHashです。これはポインタではないため、NULLと比較して生のままにすることはできません。あなたが代わりにtabelaHash **tabela;を書きたいと思っているかもしれ

...

関連する問題