具有嵌套结构指针的 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
}
我是 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
}