带嵌套结构指针的C segfault
我对C相当陌生,并试图更好地理解它,但我发生了一些奇怪的行为,我并不完全理解: 我有两个结构:带嵌套结构指针的C segfault,c,pointers,struct,segmentation-fault,C,Pointers,Struct,Segmentation Fault,我对C相当陌生,并试图更好地理解它,但我发生了一些奇怪的行为,我并不完全理解: 我有两个结构: typedef结构边缘 { int启动节点; int end_节点; }边缘; 类型定义结构图 { int节点计数; 边*边; }图形; 如果我现在初始化图形(分配内存): graph*g=malloc((sizeof(edge)*(edge_amount))+sizeof(int)); 如果我现在尝试初始化我的边,如: (调用函数parse_graph(g->edges);) void pars
typedef结构边缘
{
int启动节点;
int end_节点;
}边缘;
类型定义结构图
{
int节点计数;
边*边;
}图形;
如果我现在初始化图形(分配内存):
graph*g=malloc((sizeof(edge)*(edge_amount))+sizeof(int));
如果我现在尝试初始化我的边,如:
(调用函数parse_graph(g->edges);)
void parse_图(边*边){
对于(int i=0;i
我的边缘有一个断层。
但是,当我初始化图形(仅边)时,如下所示:
edge*g=malloc((sizeof(edge)*(edge_amount))+sizeof(int));
我调用parseInput(g)这样的函数,我没有得到segfault。
我肯定我忘了一些重要的事情,但我想不出来。这里我缺少什么?首先,您为
图形分配的空间比结构的大小要多
其次,你的分配并没有按照你的想法进行。考虑一下分配后地址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
}