[英]Can't access ** variable as an array from a struct in C
首先,這是一個很難解決的問題,因為我對C不太熟悉,我已經四處搜尋,但是我對C的術語也不熟悉。代碼也可以很好地編譯,沒有任何警告或錯誤。
我要做什么?
我試圖從HashTable結構的實例作為數組訪問項目變量。
這些是我正在使用的結構:
typedef struct
{
char *word;
int count;
} Item;
typedef struct
{
size_t size;
size_t uniques;
Item **items;
} HashTable;
當我遇到一段嘗試訪問items數組中的變量的代碼時,程序中斷:
hashTable->items[index]->word
要么
hashTable->items[index]->count
這是初始化器:
HashTable *hashTable_new (int size)
{
HashTable *hashTable = calloc (1, sizeof (HashTable));
hashTable->size = size;
hashTable->uniques = 0;
hashTable->items = calloc (size, sizeof (Item));
return hashTable;
}
return命令之前的最后一行可能是:
hashTable->items = calloc (size, sizeof(Item *));
您正在分配一個指向Item的指針數組。 因此,這將是正確的方法。 但是,您仍然必須在某個地方迭代數組,然后初始化每個項目,然后才能引用它們。 這樣的東西:
for (size_t i = 0; i < hashTable->size; ++i)
{
hashTable->items[i] = malloc(sizeof(Item));
}
hashTable-> items = calloc(size,sizeof(Item));
在上面的行中,您要嘗試創建的項目size
為No。 由hashTable->items
類型的指針指向,如果您遍歷該結構,則該指針不必是雙指針。
更改Item **items;
到Item *items;
如果要存儲每個Item結構的內存,並希望再有一個指針指向指針數組,請將第一行更改為
hashTable-> items = calloc(size,sizeof(Item *)); //創建沒有指針的大小
然后在循環中創建每個Item結構。
for (size_t i = 0; i < hashTable->size; ++i)
{
hashTable->items[i] = calloc(1,sizeof(Item));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.