我试图在C中创建哈希映射。下面是代码。当我尝试
将值分配给Darray的元素(每个元素都是指向Node的指针)我遇到了分段错误(即在第23和24行)。任何人都可以帮助指出我要去哪里了。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}Node;
typedef struct Map{
struct Node** Darray;
} Map;
#define SIZE 10
int main()
{
int i=0;
Map* M = malloc(sizeof(Map));
M->Darray = (struct Node**)malloc(sizeof(Node*)*SIZE);
for (i =0;i < SIZE;i++){
M->Darray[i]->data =0;
M->Darray[i]->next =NULL;
}
}
最佳答案
您为SIZE
指向Node
的指针分配了空间,但是没有以任何方式初始化它们,因此,当您在M->Darray[i]
中访问M->Darray[i]->data
时,会遇到分段错误,因为尚未设置M->Darray[i]
的值。
使用之前,需要为每个节点分配空间:
for (i = 0; i < SIZE; i++) {
M->Darray[i] = malloc(sizeof(Node));
M->Darray[i]->data = 0;
M->Darray[i]->next = NULL;
}
根据需要,您还可以将
Darray
更改为节点数组而不是节点指针,因此可以一次为所有节点分配空间:struct Node* Darray;
...
M->Darray = malloc(sizeof(Node) * SIZE);
for (i = 0; i < SIZE; i++) {
M->Darray[i].data = 0;
M->Darray[i].next = NULL;
}