我试图在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;
}

09-29 22:31