更新の質問は、私はこれは私がやったことですC.でハッシュテーブルを作ることに取り組んでいるなぜこのコードはCでメモリを割り当てないのですか?
Memory allocation problem in HashTable
ここにあります。私は
main.cの
HashTablePtr hash;
hash = createHashTable(10);
insert(hash, "hello");
insert(hash, "world");
HashTable.c
HashTablePtr createHashTable(unsigned int capacity){
HashTablePtr hash;
hash = (HashTablePtr) malloc(sizeof(HashTablePtr));
hash->size = 0;
hash->capacity = capacity;
ListPtr mylist = (ListPtr)calloc(capacity, sizeof(ListPtr)); /* WHY IT DOESN'T ALLOCATE MEMORY FOR mylist HERE?? */
mylist->head = NULL;
mylist->size = 0;
mylist->tail = NULL;
hash->list = mylist;
return hash;
ListPtrにしようとしているとき、私はLinkedListのをptrがされ、私は正しい道に行くと思うけど
リストh
typedef struct list List;
typedef struct list * ListPtr;
struct list {
int size;
NodePtr head;
NodePtr tail;
};
...
...
HashTable.h
typedef struct hashtable * HashTablePtr;
typedef struct hashtable HashTable;
struct hashtable {
unsigned int capacity;
unsigned int size;
ListPtr *list;
unsigned int (*makeHash)(unsigned int, void *);
};
...
...
私は、デバッガを実行すると、私はmylistに割り当てられている何のメモリを参照してくださいません。上記の例では、私の試みは10個のリストの配列にすることです。
これを解決するのを手伝ってください。
私はCの専門家ではありません。あなたがListPtrののcontigousブロックを割り当てているが、あなたは実際にそれらの構造にすべての構造だけではなく、ポインタ(ListPtr)のためのスペースを割り当てたい
貼り付けたコードが不一致の数がある - エクストラ)createHashTable中をcreateHashTableの呼び出しで実際に必要な引数より多くの引数が必要です。これは実行しているのと同じコードですか?あなたがあなたのポインタを隠さなければ、あなたの問題の多くが見えるようになると思います。 – bdonlan
つまり、ListPtrとNodePtrを削除しないでください。 – GManNickG
おっと!私はちょうどそれをきれいに見せたいと思って、それを台無しにしました。ごめんなさい。 –