当我尝试以下给出这些结构时,我不知道为什么我的代码会导致段错误:
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字段会导致问题。
答案 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
分配内存。