C中的嵌套结构访问

时间:2019-01-10 19:36:26

标签: c struct nested access member

当我尝试以下给出这些结构时,我不知道为什么我的代码会导致段错误:

typedef struct Vertex {
    int i;
    int color;
} vertex;

typedef struct Edge {
    vertex v1;
    vertex v2;
} edge;

typedef struct Node {
    vertex *v;
    struct Node *next;
} node;

node *nodehead = NULL;

导致此问题的代码:

nodehead = malloc(sizeof(node));
if (nodehead == NULL) return -1;
nodehead->v->i = 10;
nodehead->next = NULL;

也许我遗漏了一些东西,大多数人都遇到了问题,因为他们试图在对象上使用->运算符。 似乎试图将int分配给nodehead-> v-> i字段会导致问题。

2 个答案:

答案 0 :(得分:4)

您的vertex的成员node没有分配内存。要么像这样分配内存:

nodehead->v = malloc(sizeof(vertex));

在分配成员i之前,或者-甚至可能更好-更改您的struct节点以使其已经包含顶点的完整实例

typedef struct Node {
    vertex v;
    struct Node *next;
} node;

并访问我这样:

nodehead->v.i = 10;

后一种方法的优点是,您不需要管理两个对象的内存,而只需要管理节点本身。 OTOH,如果您的顶点是独立于链表使用的,则此方法可能不合适;这取决于上下文。

答案 1 :(得分:0)

nodehead->v->i = 10;行是给您带来问题的原因。

您正在尝试为v分配一个值,但是尚未分配v的内存。一种解决方案是在到达此行之前为v分配内存。