簡體   English   中英

無法從C中的結構以數組形式訪問**變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM