【问题标题】:C segfault with nested structure-pointer带有嵌套结构指针的 C 段错误
【发布时间】:2021-02-13 19:37:18
【问题描述】:

我对 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) 的函数,但没有得到段错误。 我确定我忘记了一些重要的事情,但我无法弄清楚。我在这里缺少什么?

【问题讨论】:

    标签: c pointers struct segmentation-fault


    【解决方案1】:

    首先,您为graph 分配的空间大于结构的大小。

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

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      相关资源
      最近更新 更多