我有一个在这里初始化为空的结构:

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

我的问题是,当我用“if(tabela[I]==NULL…”来测试它是否有效时,对于我提到的函数或任何其他需要“**tabela”的函数,它都可以正常工作,但是,当我在main上进行测试时,它会让我犯这个错误:
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是二叉树的哈希表,tabela hash是结构sbb(sbb是一种二叉树,定义如下:
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'ed如下:
tabelaHash *tabela;
tabela = malloc(tamanhoTabela * sizeof(tabelaHash*));

我该如何测试tabela[I]在我的main上是否仍然为空?
编辑:我不知道这是否有帮助,但我刚刚意识到,如果函数调用“tabelaHash**”,我只能对函数使用“if(tabela[I]==NULL)”。如果我需要一个“tabelaHash*”,那么它会得到相同的错误。

最佳答案

您的tabela指针只是一个指针。因此,当您执行tabela[k]时,它将获得表的“数组”中的第k个tabela。因此,tabela[k]的结果是一个tabelaHash,它不是指针,因此不能与NULL进行原始比较。
你可能想写tabelaHash **tabela;而不是。。。

10-06 04:50