1

重複の可能性:
グローバルで値を変更する 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; =}

}
4

0 に答える 0