繁体   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