具有嵌套结构指针的 C 段错误

C segfault with nested structure-pointer

我是 C 的新手并试图更好地理解它,但我发生了一些我不完全理解的奇怪行为: 我有这 2 个结构:

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;
    }
}

我在边缘出现段错误[i] = 边缘线。 但是,当我像这样初始化我的图形(只有边缘)时:

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

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

首先,您为 graph 分配的 space 多于结构的大小。

其次,您的分配并没有按照您的想法进行。想想你分配后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
}