我实现了一个带有指向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);
我是否错误地访问了变量? 我已经尝试了几种方式来访问成员,但它主要是崩溃或做了一些我无法遵循的事情。
在编码风格等方面,任何提示和帮助都会受到赞赏。
答案 0 :(得分:3)
Bug在线:
hash_table[0] = &temp;
temp已经是指针,因此您将struct student**
分配给struct student*
数组元素,这会导致所有剩余的错误。
更改为:
hash_table[0] = temp;