c-为结构内的节点动态数组赋值时的分段错误



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

您为指向NodeSIZE指针分配了空间,但没有以任何方式初始化这些指针,因此当您在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;
}

相关内容

  • 没有找到相关文章

最新更新