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