微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决带有嵌套结构指针的C段错误

我对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)之类的函数,但没有得到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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。