2016-03-26 10 views
0

ノードを新しいリストに追加しようとしています。プログラムはwhileループでクラッシュします。ノードを二重にリンクしたリストを追加する

void DLL:append(string ss, string name, int & count){ 
    Node *temp; 
    Node *newNode = new Node(); 
    newNode->ssn = ss; 
    newNode->name = name; 
    newNode->next = NULL; 
    newNode->prev = NULL; 
    temp = headPtr; 

    if(headPtr == NULL){ 
    headPtr = newNode; 
    count++; 
    }else{ 
    while(temp->next != NULL){ 
    temp = temp->next; 
    } 
    newNode->prev = temp; 
    newNode->next = NULL; 
    temp->next = newNode; 
    count++; 
    } 
} 
} 

私はまた、しかし、この代わりにそのwhileループの、同じ結果を使用して試してみた:

while(temp != NULL){ 
... 
temp = temp->next 
} 

任意の助けをいただければ幸いです!

編集: - それまでは私の表面にほぼすべてのフォルダが続くそれはシンボルなどと一緒に、全体の事を通じて得た後、他の言語の文字を表示

while(temp->next != NULL){ 
... 
temp = temp->next; 
} 

に上述した第2のケースを変更しました最終的にクラッシュしました:c

+0

を書くときに、あなたが代わりにNULLのnullptrを使用しての習慣を取ることをお勧めします( "temp = temp-> next" < - 最後にセミコロンを付けないでください –

+0

私は再入力しました、私は実際のコードでセミコロンを持っています – Speakmore

答えて

0

現在、ループはtempがNULLになるまでループします。この値に達すると、temp->nextを実行して逆参照します。それはUBで、あなたのプログラムがクラッシュする原因です。

while(temp->next != NULL){ 
    temp = temp->next 
} 

tempがでNULLであるというリスクはありませんということ:あなたが最後の要素(すなわち、次の要素がNULLである)にいる時に停止させるためにwhileループ

変更しますが、以下のように、あなたのif節のおかげで、ループの始まり。

無関係の発言:私は、私はCで、専門家ではないよ++が、あなたはwhile文にライン上のセミコロンが欠落しているように見えるC++コード

+0

私はちょっと試してみます!私のコンパイラは私にエラーを与えていた...私はちょうど私のコードをチェックした、私は実際にあなたが言ったことがあり、それは動作していないようです... – Speakmore

+0

追加がまだクラッシュですか? :: string?また、++ 1をあまりにも多くカウントすることに注意してください。すべてをループ内に表示すると到達する要素の数を歌い、ヌルポインタを表示します。私たちが間違っている可能性があることをすべて推測できないので、関連するすべてのコードを質問に入れてください。 – Christophe

+0

私が試したすべての方法(上記を含め、あなたのものを含む)は、実際に私のためにクラッシュします。 – Speakmore

関連する問題