C++

2016-04-01 22 views
1

'da Bağlantılılar Listesi'nde erişim ihlali Okuma erişimi açık, işlevleri gerçekleştirmek istediğim çok basit bir bağlantı listesi var, ancak kodumu çalıştırdığımda 'kök' düğümünde okuma erişimi ihlali hatası almaya devam ediyorum. atılanC++

İstisna: erişim ihlali okumak İşte

alıyorum hatadır (I satır kod sonra hatalar olsun yorumladı). kökü, 0xCCCCCCCC idi. Bu özel durum için bir işleyici varsa, program güvenli bir şekilde devam edebilir.

Bu

yapıdır:

struct node { 
int value; 
node* link; 

node(int val) { 
    link = NULL; 
    value = val; 
} 
}; 

Önce başlatmak olduğunu bağlantılı böyle ana işlevi listesi:

int main() 
{ 
node *root; 

addnode(root, 20); 
addnode(root, 1); 
addnode(root, 50); 


node *curr; 
for (curr = root; curr->link != NULL; curr = curr->link) { // I get error here 
    cout << curr->value << " "; 
} 
cout << endl; 

cout << "Number of elements " << countlist(root) << endl; 

getchar(); 
return 0; 
} 

Ve (ilki düğüm eklemek için vardır denir fonksiyonu, ve listedeki düğümlerin sayısını saymak için ikinciyi):

T O hata devam ediyor, koddaki yorumlarda bahsettiğim satırlarda var.

+0

Say , 'root == 0x12345' ve' root-> next == NULL' döngüden önce. Durumunun kontrol edilmesini ne bekliyorsunuz? –

+1

'root' başlatılmamış ancak onun (rasgele, başlatılmamış) değeri kullanılmıştır. –

+0

Kodun benim için iyi çalışıyor. Bu hatayı yeniden üretme hakkında daha fazla bilgi verebilir misiniz? – LibertyPaul

cevap

1

İyi alışkanlık beyanında bulunan tüm değişkenleri başlatılıyor olabilir bu tür sorunların önlemek için: Ayrıca

int main() 
{ 
    node *root = nullptr; 
    // ... 
} 

, istemediğiniz:

node *curr; 
for (curr = root; curr->link != NULL; curr = curr->link) { 
    cout << curr->value << " "; 
} 

ama

for (node *curr = root; curr != nullptr; curr = curr->link) { 
    cout << curr->value << " "; 
} 
+0

'dan çıkmaz. Bu çalıştı, ancak ana 'addnode (root, 20)' de eklediğim ilk öğe, listeyi yazdırdığımda görünmüyor ve sayım işlevinde sayılmadı (sadece kayboluyor) –

+0

SO ile yeni soru ekleyin şu anki problemin – zoska