我有这个结构:
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,或类似的东西。为什么会发生这种情况?我该如何解决?
答案 0 :(得分:0)
graph
(在init_graph
中)是一个函数参数。这意味着它是函数中的局部变量(包含参数的副本)。修改参数对函数的调用者没有影响。
此外,graph
(在main
?中)甚至不是指针。它是一个结构;它已经为它分配了内存。如果您从graph = (Graph *) malloc(sizeof(Graph))
移除init_graph
行,则一切都应该有效。
旁注:你不应该cast the return value of malloc
。
答案 1 :(得分:0)
你有这个功能:
pip install -U djangorestframework
并且您正在使用
进行调用void init_graph(Graph *g)
这意味着您将本地指针变量init_graph(&graph)
分配给g
地址的值。 graph
是g
,并且始终是init_graph
中的局部变量。你正在做的是给它一个地址的值给函数外的变量。当您重新调用g=malloc(sizeof(Graph))
时,您将g
分配给一个全新的值,指向一个完全不同的内存位置。
删除该行,你应该没事。
(我删除了已经建议的melpomene的演员。我还将参数的名称更改为init_graph
,因此它与外部变量的名称不同。)