打印C后结构成员的值发生更改
我在打印node的id成员变量时得到了这段代码和一个奇怪的行为打印C后结构成员的值发生更改,c,member,C,Member,我在打印node的id成员变量时得到了这段代码和一个奇怪的行为 #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { int id; int visited; // struct node *neighbors_[]; }; struct graph { struct node nodes[26]; int adjMat[26]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int id;
int visited;
// struct node *neighbors_[];
};
struct graph
{
struct node nodes[26];
int adjMat[26][26];
};
struct stack_item
{
struct node node;
struct stack_item *next_;
};
struct myStack
{
struct stack_item *anfang_;
};
void initGraph(struct graph *graph_);
void push(struct myStack *stack_, struct node node);
int main()
{
struct graph graph;
struct myStack stack;
char ausgabe[26]="";
initGraph(&graph);
//READ DATA
char line[200];
int firstTime=1,first;
first=0;
push(&stack,graph.nodes[first]);
printf("ID %i\n",stack.anfang_->node.id);
printf("ID %i\n",stack.anfang_->node.id);
//FINISHED DATA READING
//CALL DFS
//dfs(graph,stack,ausgabe);
}
void push(struct myStack *stack_, struct node node)
{
struct stack_item item;
item.node=node;
item.next_=stack_->anfang_;
stack_->anfang_=&item;
}
void initGraph(struct graph *graph_)
{
int i,j;
for(i=0; i<26; i++)
{
struct node node= {i,0};
graph_->nodes[i]=node;
for(j=0; j<26; j++)
{
graph_->adjMat[i][j]=0;
}
}
}
#包括
#包括
#包括
结构节点
{
int-id;
国际访问;
//结构节点*邻居_[];
};
结构图
{
结构节点节点[26];
int adjMat[26][26];
};
结构堆栈\u项
{
结构节点;
结构堆栈\u项*下一个\u;
};
结构myStack
{
结构堆栈项目*安防项目;
};
void initGraph(结构图*图);
void push(struct myStack*堆栈,struct node);
int main()
{
结构图;
结构myStack堆栈;
char ausgabe[26]=“”;
initGraph(&graph);
//读取数据
字符行[200];
int firstTime=1,first;
第一个=0;
推送(&堆栈,graph.nodes[第一]);
printf(“ID%i\n”,stack.anfang->node.ID);
printf(“ID%i\n”,stack.anfang->node.ID);
//已完成的数据读取
//呼叫DFS
//dfs(图形、堆栈、ausgabe);
}
无效推送(结构myStack*堆栈,结构节点)
{
结构堆栈\项;
item.node=节点;
项目。下一步=堆叠->安防;
堆栈->安防->项目;
}
void initGraph(结构图*图)
{
int i,j;
对于(i=0;索引节点[i]=节点;
对于(j=0;jadjMat[i][j]=0;
}
}
}
如果我执行此命令,第一个print命令将导致“ID 0”,第二个命令将导致“ID 1980796117”。通过打印该值如何更改?请任何人帮助我,我真的不知道
void push(struct myStack *stack_, struct node node)
{
struct stack_item item;
item.node=node;
item.next_=stack_->anfang_;
/* BAD! */
stack_->anfang_=&item;
}
item
是一个局部变量,当push
函数返回时,该变量超出范围。引用此对象的任何现有指针现在都无效,取消引用它会导致未定义的行为
如果您需要在函数返回后将
项
(即malloc
)持久化,则需要动态分配该项。您能否将代码精简到最简单的情况?