2016-03-26 3 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(temp != NULL){ 
... 
temp = temp->next 
} 

Любая помощь будет принята с благодарностью!

Edit: не изменен второй случай выше

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

Он прошел через всю вещь, а затем отображаются символы других языков, наряду с символами, и т.д. - затем следуют примерно каждую папку на поверхности, пока она наконец, разбился: c

+0

Я не являюсь экспертом в C++, но вы, кажется, отсутствует точка с запятой в строке в заявлении в то время как («temp = temp-> next» <- no semicolon at end –

+0

Я, спасибо! Я перепечатал его, у меня есть точка с запятой в моем реальном коде – Speakmore

ответ

0

Вы в настоящее время выполняете цикл до temp NULL. Когда он достиг этой цели, вы разыгрываете ее, делая temp->next. Это UB, и здесь причина сбоя вашей программы.

Изменение вас во время цикла следующим образом, для того, чтобы остановить, когда вы в последний элемент (то есть на следующий элемент является NULL):

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

Обратите внимание, что нет никакого риска, что temp является NULL на начало цикла, благодаря вашему if-clause.

Unrelated замечание: Я рекомендую вам взять привычку использовать nullptr вместо NULL при написании C++ код

+0

Спасибо, куча, я попробую это немного! У меня был nullptr но мой компилятор давал мне ошибку ... Я только что проверил свой код, на самом деле у меня есть то, что вы сказали, и похоже, что он не работает ... – Speakmore

+0

Есть ли еще что-нибудь в append? Определяется ли Node :: name как std :: string? Заметьте также, что вы считаете ++ слишком большим: если вы покажете все в цикле u петь количество элементов, которые вы достигнете, и отобразить нулевой указатель. Пожалуйста, введите в свой вопрос весь соответствующий код, поскольку мы не можем догадаться обо всем, что может пойти не так. – Christophe

+0

Каждый метод, который я пробовал (перечисленный выше, включая ваш), действительно рушится для меня. – Speakmore