带有嵌套结构指针的C segfault



我对C很陌生,并试图更好地理解它,但我出现了一些奇怪的行为,我还没有完全理解:我有两个结构:

typedef struct edge
{
int start_node;
int end_node;
} edge;

typedef struct graph 
{
int node_count;
edge *edges;
} graph;

如果我现在初始化我的图(分配内存(:

graph *g = malloc((sizeof(edge )* (edge_amount)) + sizeof(int)); 

如果我现在尝试初始化我的边缘,如:(调用函数parse_graph(g->edges(;(

void parse_graph(edge *edges){
for (int i = 0; i < edge_amount ; i++)
{

edge edge;
edge.start_node = some int
edge.end_node = some int
edges[i] = edge;
}
}

我在边缘得到一个segfault[I]=边缘线。但是,当我初始化我的图(只有边(时,比如:

edge *g= malloc((sizeof(edge )* (edge_amount)) + sizeof(int));

我调用类似parseInput(g(的函数,但没有得到segfault。我确信我忘记了一些重要的事情,但我想不通。我在这里缺少什么?

首先,您为graph分配的空间比结构的大小还要多。

其次,你的分配并没有按照你的想法进行。想想分配后g->edges包含的地址。

还有一些你没有考虑的结构包装问题。

不管怎样,你需要做的是

g = malloc(sizeof(graph));
if ( !g ) {
// error handling
}
g->num_edges = edge_amount;
g->edges = malloc(sizeof(edge)*edge_amount);
if ( !g->edges ) {
// error handling
}

最新更新