结构设置等于随机值
问题描述:
我有这样的结构:结构设置等于随机值
typedef struct Graph{
node ** vertices;
int vertex_number;
}Graph;
我然后运行这个函数来创建一个图表:
void init_graph(Graph *graph){
graph = (Graph *) malloc(sizeof(Graph));
graph->vertices = (node **) malloc(sizeof(node *));
graph->vertex_number = 0;
}
而像这样运行:
init_graph(&graph);
printf("%d", graph.vertex_number);
当我尝试打印我创建的图的vertex_number的值时,而不是给我零它给我一个像1356352456这样的大数字,或类似的东西。为什么会发生这种情况,我该如何解决?
答
(在init_graph
)是一个函数参数。这意味着它是函数内的局部变量(包含参数的副本)。修改参数对函数的调用者没有影响。
此外,(在main
?)甚至不是指针。这是一个结构;它已经为它分配了内存。如果您从init_graph
中删除graph = (Graph *) malloc(sizeof(Graph))
行,则一切都应该起作用。
附注:您不应该cast the return value of malloc
。
答
你有这样的功能:
void init_graph(Graph *g)
和你与
init_graph(&graph)
这意味着调用它,是你的本地指针变量g
分配到的地址的值。 g
是,并将始终是init_graph
中的局部变量。你所做的就是将地址的值赋给函数外的变量。当您调用g=malloc(sizeof(Graph))
时,您正在将g
分配给一个全新的值,指向完全不同的存储位置。
删除该行,你应该没问题。
(我脱离的铸造为墨尔波墨涅已经建议,我也改变了参数init_graph
的名称,以便它不具有相同的名称作为外部变量)。
你不改变指针*呼叫者*。另外,这不是[mcve]。如何声明'graph'?一个结构 - 你已经分配了它!只要删除'graph =(Graph *)malloc(sizeof(Graph));'它会工作... –