我正试图在C中创建一个哈希映射。下面是代码。当我尝试为Darray的元素赋值(每个元素都是指向节点的指针)我得到了一个分段错误(即第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;
}
}
您为指向Node
的SIZE
指针分配了空间,但没有以任何方式初始化这些指针,因此当您在M->Darray[i]->data
中访问M->Darray[i]
时,会出现分段错误,因为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;
}