我正在实现一个带有指向结构实例的指针的哈希表。
结构:
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/