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

标签 c pointers struct hashtable

我正在实现一个带有指向结构实例的指针的哈希表。

结构:

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;

我正在创建一个具有适当内存管理的结构实例:

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;

直到这里它都正常工作,如果我在调试程序时检查我的临时文件(结构实例)它看起来很好。 在此函数结束时,将 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);

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

感谢任何提示和帮助,包括编码风格等。

最佳答案

错误上线:

hash_table[0] = &temp;

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

更改为:

hash_table[0] = temp;

关于c - 哈希表中的链表(带结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443135/

相关文章:

c - 空指针算术和取消引用

c - 接收错误 - 请求成员 ****** 不是结构或 union

c - 通过函数初始化C结构

c:将 char 指针类型转换为 const char 数组

C - 数组中的多余元素

c++ - 枚举和定义语句之间的区别

c++ - 从自定义集合中读取数据(结构数组)

c++ - 如何在结构数组中自动初始化最后一项?

c++ - utf8 识别 strncpy

c - Bubblesort 每次都减小大小