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