在为结构内部的动态阵列数组分配值时出现分段错误

时间:2016-07-30 18:20:09

标签: c hashmap segmentation-fault malloc

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

1 个答案:

答案 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