1

remove_entry 関数と clear_table 関数を持つハッシュテーブルを実装しています。現在、remove_entry 関数に関連するメモリ読み取りエラーが発生しています。そして、助けていただければ幸いです

これらは私の構造です:

typedef struct bucket {
   char *key;
   void *value;
   struct bucket *next;
} Bucket;

typedef struct {
   int key_count;
   int table_size;
   void (*free_value)(void *);
   Bucket **buckets;
} Table;

これが私の機能です:

int remove_entry(Table * table, const char *key){
    unsigned int hc = 0;
    Bucket *curr_b;
    Bucket *next_b;

    if(table == NULL || key == NULL){
        return FAIL;
    } else {
        hc = hash_code(key)%(table->table_size);
        if(table->buckets[hc] != NULL){
            curr_b = table->buckets[hc];

            /*Check the buckets in linked list*/
            while(curr_b != NULL){
                next_b = curr_b->next;

                if(strcmp(curr_b->key,key) == 0){
                    free(curr_b->key);
                    if(table->free_value != NULL){
                        table->free_value(curr_b->value);
                    }
                    free(curr_b);
                    curr_b = NULL;
                    table->key_count--;
                    return SUCC;
                } else {
                    curr_b = next_b;
                }
            }
            return FAIL;
        }
        return FAIL;
    }
}

メモリ リークは、エントリを削除してからテーブルを読み取ろうとした後に発生します。私は物事を正しく削除したとは思わない。

メモリ エラー:

端末からコピー/貼り付けする方法がわからないので、彼らはすべて次のようなことを言います

Invalid read of size __
Address ____ is __ bytes inside a block of size ___ free'd
4

1 に答える 1