2016-03-21 29 views
-1

Bu programı yazdım ve derlediğimde çöküyor. Yürütülebilir dosyanın çalışmayı durdurduğunu ve Windows'un bir çözüm bulmaya çalıştığını söylüyor. Bağlantılı bir listeye bir düğüm eklemek için yazdığım bu addPage işlevinde bir yer sorun olduğuna inanıyorum, ancak sorunun neden olduğundan emin değilim.Bağlantılı listeye düğüm eklemeye çalışırken program çöküyor

void initPage(struct page *head, string programName) { 

// Assign Properties of the First Node in the Linked List 
head->programName = programName; 
head->nextPage = NULL; 

} 

void addPage(struct page *head, string programName) { 

// Initialize First Page if Not Initialized 
if (head == NULL) { 
    initPage(head, programName); 
    return; 
} 

// Setup the New Page 
page *newPage = new page; 
newPage->programName = programName; 
newPage->nextPage = NULL; 

// Set the Pointer to the Beginning of the Linked List 
page *current = head; 

// While Traversing the Linked List 
while(current) { 

    // If the End of the List is Reached, Append the Page 
    if (current->nextPage == NULL) { 
     current->nextPage = newPage; 
     return; 
    } 

    // Grab the Next Page (If not at the End of the Page) 
    current = current->nextPage; 
} 

} 
+1

Hata ayıklama yardımını arayan sorular ("neden bu kod çalışmıyor?") Istenen davranışı, belirli bir sorunu veya hatayı ve sorunun kendisinde çoğaltılması için gereken en kısa kodu içermelidir. Açık bir problem bildirimi olmayan sorular diğer okurlar için yararlı değildir. Bakınız: Minimal, Tam ve Doğrulanabilir bir örnek nasıl oluşturulur? http://stackoverflow.com/help/mcve – xaxxon

+1

@Rinzler http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen

+2

Kazayı yakalamak için bir hata ayıklayıcısında çalışmayı denediniz mi? eylemde Nerede gerçekleşir? İlgili değişkenler iyi görünüyor mu? Bu işlevi nasıl çağırıyorsunuz? Fonksiyonu ne zaman çağırıyorsun? Nereden işlev çağırıyorsun? Fonksiyona ilettiğiniz argümanlar nelerdir? İlk aramayı bozuyor mu? İkinci? Görünüşte rasgele mi? –

cevap

5

Bu:

if (head == NULL) { 
    initPage(head, programName); 

sonra hemen dereferences initPage bir boş geçer. Boom.

İpucu: Kullanmadan önce null için bir işaretçiyi her zaman kontrol edin.

Ayrıca, initPage, addPage'deki tamamlanmamış bir kod kopyasıdır. Yeni sayfayı yaratan (yani, initPage() yöntemini hiçbir zaman arama) kodun her zaman çalıştırılması daha iyi görünüyor ve daha sonra, bir sayfanız olduğunda, yalnızca ayarlamanız gerekip gerekmediğini görmek için sınama başlığını test edin. yeni sayfaya gidin veya listeyi sonuna kadar tekrarlayın.

+0

Bunu düzeltmek için kodumu nasıl değiştirmeliyim? Meselenin orada olduğuna şaşırdım çünkü daha önce onu yorumlamaya çalıştım ve aslında işe yaradı, ama belki de başka bir şey yapıyordu. – Rinzler

+0

Kodu kendi kendinize adım atın - bu iyi bir uygulamadır. Sanırım çalışıyordu çünkü "page * current = head; // Bağlantılı Listeyi Geçerken (akım) {..." eğer sıra null olursa dizi girilmez, dolayısıyla hiçbir şey yapmaz. – christutty

+0

Çökmeye neden olan şeyi hala anlayamadım – Rinzler

İlgili konular