哈希表中的链表(带结构)

时间:2017-01-03 12:03:54

标签: c pointers struct hashtable

我实现了一个带有指向struct实例的指针的哈希表。

STRUCT:

typedef struct student 
{
    int matrikelnummer;
    char *name;
    struct student *next;
} student;

数组(在我的结构上有指针):

student *hash_table[SIZE];
...
for (int i = 0; i < SIZE; i++)
    hash_table[i] = NULL;

我正在通过适当的内存管理创建我的struct实例:

char *name = malloc(100);
student *temp = malloc(sizeof(student));
if (temp == NULL || name == NULL)
    return;

printf("Neuer Student hinzufuegen:\n");
printf("Name: ");
scanf("%99s", name);
temp->name = malloc(strlen(name) + 1);
if (temp->name == NULL)
    return;
strcpy(temp->name, name);
free(name);
name = NULL;

printf("Matrikelnumer: ");
scanf("%d", &temp->matrikelnummer);

temp->next = NULL;

直到这里它正常工作,如果我在调试程序时检查我的temp(struct实例)它看起来很好。 在此函数结束时,将hash_table [0]中的指针更改为我的临时实例似乎有效:

hash_table[0] = &temp;
/* hash_table[get_hash_key(temp->matrikelnummer)] = &temp; */

在我尝试打印hash_table的成员后,我的程序崩溃了,如下所示:

printf("matrikelnumer: %d\n", hash_table[0]->matrikelnummer);

输出:matrikelnummer:9741328 (看起来地址本身印有%d)

在尝试使用以下代码行打印名称后崩溃:

printf("name: %s\n", hash_table[0]->name);

我是否错误地访问了变量? 我已经尝试了几种方式来访问成员,但它主要是崩溃或做了一些我无法遵循的事情。

在编码风格等方面,任何提示和帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

Bug在线:

hash_table[0] = &temp;

temp已经是指针,因此您将struct student**分配给struct student*数组元素,这会导致所有剩余的错误。

更改为:

hash_table[0] = temp;