2016-03-26 21 views
0

Düğümün yeni bir listeye eklemeye çalışıyorum. Program while döngüsünde çöker.Düğüm Bağlantısını Düzenli Olarak Bağlantılı Liste Ekle

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++; 
    } 
} 
} 

Ben de ancak bu yerine o süre döngü, aynı sonucu kullanarak denedim:

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

Herhangi yardım büyük takdir!

Düzenleme: - o kadar benim yüzeyde yaklaşık her klasöre göre daha sonra takip vb tüm şey var ve sonra sembollerle birlikte, diğer dillerin karakterleri görüntülenen

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

yukarıdaki ikinci durumda Değişti nihayet çöktü: c

+0

nullptr kullanma alışkanlığını almak tavsiye ("temp = temp-> sonraki" <- sonunda noktalı virgül yok –

+0

Ben, teşekkürler! Tekrar yazdım, gerçek kodumda noktalı virgül var – Speakmore

cevap

0

Şu anda temp NULL olana kadar devam edersiniz. Bu kaliteye eriştiğinde, temp->next yaparak bunu geçersiz kılarsınız. Bu UB ve programınızın çökmesinin sebebi burada.

Değişim sizi döngü, son elemanın olduğun zaman durdurmak için (bir sonraki elemana yani NULL'dur) şu şekilde oluştu: temp de BOŞ olduğuna hiç riski olduğunu

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

Not Döngünün başlangıcı, if-cümlesi sayesinde.

İlgisiz sözler: Ben C'de uzmanı değilim ++ ama süre açıklamada satırda noktalı virgül eksik görünüyor Eğer C'yi yazarken NULL yerine ++ kodu

+0

Bir demet teşekkürler, biraz deneyeceğim! Nullptr ama derleyicim bana bir hata veriyordu ... Kodumu kontrol ettim, aslında söylediklerim var ve işe yaramıyor ... – Speakmore

+0

Ekleme hala çöküyor mu? Düğüm var mı? adı std olarak tanımlandı :: string? Not: Ayrıca, bir tane çok fazla saymanıza da dikkat edin: eğer her şeyi bir döngüde gösterirseniz ulaşacağınız ve boş göstericiyi görüntüleyeceğiniz öğelerin sayısını söyleyin. Yanlış giden her şeyi tahmin edemeyeceğimiz için lütfen tüm ilgili kodu sorununuzu belirtin. – Christophe

+0

Denediğim her yöntem (sizinki dahil, yukarıda listelenmiştir), gerçekten benim için çöküyor. – Speakmore

İlgili konular