我正在尝试用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;
}
}
答案 0 :(得分:1)
您为SIZE
的{{1}}指针分配空间,但不以任何方式初始化这些空间,因此当您在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