将struct的元素添加到同一结构的数组中时出错

时间:2016-04-06 20:57:03

标签: c arrays pointers struct malloc

您好我想在另一个struct(hash_table)中添加一个名为hash_entry的结构到一个hash_entry数组,但是我收到了这个错误:

hash.c:67:5: error: invalid use of undefined type ‘struct hash_entry’
 my_table->table[0] =  e;
 ^
hash.c:67:30: error: dereferencing pointer to incomplete type
 my_table->table[0] =  e;

我的结构:

typedef struct hash_entry{
  int value;
} Hash_entry;

typedef struct hash_table{
  struct hash_entry * table; 

} Hash_table;

我的代码将内存分配给数组并添加:

Hash_entry e;
e.value =  10;

Hash_table *my_table = (Hash_table *) malloc(sizeof (Hash_table));

my_table->table = malloc (sizeof (Hash_entry) * 10);

my_table->table[0] =  e;

1 个答案:

答案 0 :(得分:2)

您为变量指定了与该类型相同的名称,将其更改为:

hash_table *my_hash_table = (hash_table*) malloc(sizeof (hash_table));

my_hash_table->table = malloc (sizeof (hash_entry) * 10);
my_hash_table->table = NULL;

my_hash_table->table[0] =  e;

然后注意到这一点:

my_hash_table->table = NULL;

实际上是错误的,因为你想使用table,所以删除它。

全部放在一起(并亲自检查mystruct.c):

#include <stdio.h>
#include <stdlib.h>

typedef struct hash_entry{
        int value;
} hash_entry;

typedef struct hash_table{
        struct hash_entry * table; 
} hash_table;

int main(void) {
        hash_entry e;
        e.value =  10;

        hash_table *my_hash_table = (hash_table*) malloc(sizeof (hash_table));
        my_hash_table->table = malloc (sizeof (hash_entry) * 10);

        my_hash_table->table[0] =  e;
        printf("Value = %d\n", my_hash_table->table[0].value);
        return 0;
}

输出:

gsamaras@gsamaras:~$ gcc -Wall px.c 
gsamaras@gsamaras:~$ ./a.out 
Value = 10