私はグローバルとしてヘルパー変数を宣言していない場合は機能していないリンクリスト

ansme:

私は単独でリンクリストを作成するプログラムを書いています。私は、そのうちの一つが、「トン」と命名された私が使用していることを、リストの最初のノードと他のポインタ変数を指し、「開始」と命名された2つのポインタ変数を使用しています。私はスタートを乱すことなく、リストを横断するのに役立ちますヘルパー変数としてこのポインタを使用しています。
プログラムが正常にコンパイルが、私が直面してる問題は、実行時に、それは私だけがリストに一つのノードを追加することを可能にするということですされます。私は別のノードを追加しようとした場合その後、実行は、ノードのデータを入力した後に停止します。
私は物事のカップルを試みたが、そのうちの一つだけが働いていました。私はグローバルとして「ヘルパーポインタ変数」を宣言した場合、プログラムは正常に実行を開始します。
なぜこれがさえ起こっているのでしょうか?
私はリストを横断する機能でヘルパーポインタ変数「t」を使用していると言っても、プログラム内の他の機能と通信していません。

それが唯一のグローバル宣言で動作しますなぜ誰かが説明していただけますか?

これは、関数のコードです - >

void insert()
{

    struct node *newnode;
    struct node *t; //<------this is the helper variable if I declare this locally
                            //then the problem occurs in the run time.                                  
    newnode = create();
    printf("Enter data ");
    scanf("%d",&newnode->info); 
    //printf("Node info = %d",newnode->info);
    if(start==NULL) 
    {
        start=newnode;  <------ this is that start variable which is declared above globally
        start->next=NULL;
        t=newnode;
    }
    else
    {
        t->next=newnode;
        t=newnode;
        t->next=NULL;       
    }   
    printf("%d successfully added to the list.",newnode->info);
}
Adnesh Dhamangaonkar:

機能の開始時に変数tは、ダングリングポインタすなわち、それは逆参照することはできません。前elseブロックでこれを入れてみてくださいt->next=newnode;

t = start;
while(t->next)
    t = t->next;

あなたがグローバル(または静的があまりにも動作します)として宣言すると、あなたはそれに格納されていた最後の値、それはダングリングポインタで開始されませんので、すべての時間を覚えています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=29159&siteId=1