重複の可能性:
グローバルで値を変更する C ツリーノード ポインター
さまざまなビットでいっぱいのノードツリーを作成するプログラムがあります(実際には再帰降下パーサーです)。とにかく、最後に到達したら、プログラムが現在ある最初の「トークン」にポインターを割り当てます。そのノードの「子」を、トークンであるデータを含む新しいノードと等しくなるように割り当てます。
それで、私のプログラムは次に進みます。つまり、グローバルな「トークン」を次の値に変更します。
私が抱えている問題は、適切なデータを指していたツリーノードも変更されることです。
つまり、プログラムがこのような単純な文字列をトークン化しているとしましょう。
firstvar = 1
だから、最初にツリーは言うprogram->assignStmt->{identifier; firstvar}
しかしその後、プログラムは次のトークンに移動するため、現在のグローバル トークンは{assignment; =}
になり、assignStmt ツリーノードが値を持ち続けるのではなく、値{identifier; firstvar}
が になります{assignment; =}
。ポインターは値を保持しませんでした!
うまくいけば、これはあなたたちが私に論理的に指摘できるものです.
編集 (午後 2:30) :: わかりました...ここにいくつかのコードがあります
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; =}
}