1

そのため、ハッシュ テーブルに存在する文字列の数を数えようとしています。何らかの理由で、この関数は常に 0 を返します。ロジックのエラーを見つけるために、少し異なる方法で数回書き直してみましたが、私の知る限り、この関数はエントリの数を出力するはずですテーブル。これは非常にイライラするようになったので、助けていただければ幸いです。ありがとう!

/* htbl_n_entries : htbl* -> unsigned int */
/* return the number of entries in all buckets */
unsigned int htbl_n_entries(htbl *t){
    int i;
    int nbucks = t->n_buckets;
    sll**bucks= t->buckets;
    unsigned int sum = 0;
    for (i = 0; i < nbucks; ++i)
    {
        while(bucks[i] != NULL){
        sum++;
        bucks[i] = bucks[i]->next;
    }
}
    return sum;
}
4

1 に答える 1

0

bucks[i].コード内のwhileは、試行ごとにNULLに設定されます。

sll**bucks= t->buckets;
unsigned int sum = 0;
for (i = 0; i < nbucks; ++i)
{
        sll*bucks_= bucks[i];
    while(bucks_ != NULL){
    sum++;
    bucks_ = bucks_->next;
}
}

これは1つのエラーですが、0を返す理由を説明しないでください。最初は正しくカウントされますが、それ以外の場合は0になります。他の関数でも同様のエラーが発生し、この時点でテーブルはすでに壊れています。

于 2013-03-01T20:42:18.403 に答える