2010-07-01 4 views
0

Привет, ребята, извините, но я новичок в двусвязных списках и задавался вопросом, может ли кто-нибудь сказать мне, почему моя программа вылетает, когда я использую add_end()?Списки ссылок в C++

#include <iostream> 
using namespace std; 

node *start_ptr = NULL; 
node *current; 
int option = 0; 

void add_end() 
{ 
    node *temp, *temp2; 
    temp = new node; 
    cout << "Enter name: "; 
    cin >> temp->name; 
    cout << "Enter profession: "; 
    cin >> temp->profession; 
    cout << "Enter age: "; 
    cin >> temp->age; 
    temp->nxt = NULL; 
    if (start_ptr = NULL) 
    { 
    start_ptr = temp; 
    current = start_ptr; 
    } 
    else 
    { 
     temp2 = start_ptr; 
     while (temp2->nxt != NULL) 
     { 
      temp2 = temp2->nxt; 
     } 
     temp2->nxt = temp; 
     temp->prv = temp2; 
    } 
} 
+2

Уточнитните «аварии». –

+1

Где именно находится 'node'? Любая причина, в частности, вы не используете 'std :: list' (или даже лучше' std :: vector')? –

+4

Возможная ошибка: если «(start_ptr = NULL)» устанавливает start_ptr равным NULL. Я думаю, что вы имели в виду «if (start_ptr == NULL)» –

ответ

2

Я держал пари, что это if (start_ptr = NULL) не то, что вы хотели ... Вы забываете =? Условие if никогда не будет выполнено, поскольку этот оператор эквивалентен start_ptr = 0; if (0), а затем ваш код будет считать, что start_ptr может быть разыменован. Вы Ассинг его temp2 и затем разыменования NULL для доступа static_cast<node*>(0)->next ...

0

Эта линия, очевидно, неправильно:

if (start_ptr = NULL)