结构设置等于随机值

时间:2017-10-19 19:19:29

标签: c pointers struct initialization int

我有这个结构:

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,或类似的东西。为什么会发生这种情况?我该如何解决?

2 个答案:

答案 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地址的值。 graphg,并且始终是init_graph中的局部变量。你正在做的是给它一个地址的值给函数外的变量。当您重新调用g=malloc(sizeof(Graph))时,您将g分配给一个全新的值,指向一个完全不同的内存位置。

删除该行,你应该没事。

(我删除了已经建议的melpomene的演员。我还将参数的名称更改为init_graph,因此它与外部变量的名称不同。)