我正在尝试用 C 创建 HashMap 。下面是代码。当我尝试 为 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;
}
}
最佳答案
您为 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;
}
关于c - 为结构内部的动态节点数组赋值时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677115/