可能重复:
C Treenode 指针使用全局变量更改值
我有一个程序正在创建一个充满各种位的节点树(它实际上是一个递归下降解析器)。无论如何,当我走到最后时,我将一个指针分配给我的程序当前所在的第一个“令牌”。我将该节点的“子节点”分配为等于包含作为令牌的数据的新节点。
所以,然后我的程序继续。也就是说,它将全局“令牌”更改为下一个值。
然后我遇到的问题是指向适当数据的树节点现在也发生了变化。
也就是说,假设程序正在标记一个像这样的简单字符串。
firstvar = 1
所以,最初这棵树说program->assignStmt->{identifier; firstvar}
但是随后,程序转到下一个标记,所以现在当前的全局标记是{assignment; =}
,而不是 assignStmt 树节点继续具有值{identifier; firstvar}
,它现在具有值{assignment; =}
。指针没有保留值!
希望这是你们可以在逻辑上指出我的东西。
编辑(下午 2 点 30 分):: OKAY ... 这是一些代码
typedef struct node {
TOKEN *data;
struct node *child1, *child2, *child3, *child4, *parent;
} node;
TOKEN *token;
Symbol sym;
struct node *root;
void getsym()
{
token = getNextToken();
sym = token->sym;
}
int main()
{
getsym();
//So, right now, from getsym() the global token has the value {identifier; firstvar}
struct node* tempNode;
tempNode = (struct node*) calloc(1, sizeof(struct node));
tempNode->child1 = tempNode->child2 = tempNode->child3 = tempNode->child4 = NULL;
tempNode->data = token;
getsym();
//BUT NOW from getsym() the global token has the value {assignment; =}, and
//subsequently the tempNode->data has changed from what it should be
//{identifier; firstvar} to what the global token's new value is: {assignment; =}
}