2013-03-12 3 views
0
   if(tmpPtr->number<tmpPtr->next_number->number) 
       { 
        int tmpV1=tmpPtr->next_number->number; 
        int tmpV2=tmpPtr->number; 
        tmpPtr->next_number->number=tmpV2; 
        tmpV2=tmpPtr->number=tmpV1; 
       } 

Это то, что я пробовал до сих пор, это должно быть сортировка связанного списка, поскольку член добавляется каждый раз. Но когда компилятор сработает, когда я пытаюсь установить второй узел. Точкой останова является оператор if, if(tmpPtr->number<tmpPtr->next_number->number). Я очень старался понять, в чем проблема, но не смог.C++ программа сбрасывает связанный список?

+2

Я предполагаю, что 'tmpPtr-> next_number' является' NULL' или неинициализирован. –

+1

При использовании отладчика, какая строка вызвала проблему? –

+0

@DavidBrown Я предполагаю, что это неправильно связано. Любые предложения по его устранению? – 2013-03-12 23:27:31

ответ

2

Ваша проблема в том, что во втором прогоне tmpPtr указывает на ваш первый элемент, который имеет значение next_numberNULL. Поэтому, как только вы попытаетесь разыменовать его, он в основном уменьшит себя до указателя NULL, который приведет к SIGSEGV.

после первого запуска

n->number = input 
n->next_number = NULL 
h = n 
t = n 
counter2 = 1 

так, начиная со вторым входом

n->number 
n->next_number = NULL 
tmpPtr = h // which is the previous n and therefor h->next_number = NULL 
tmpPtr->next_number == NULL // this is your problem since you do not check if next_number is a valid pointer 

ОБНОВЛЕНИЕ: , если загрузил (хак) версию раствора при https://gist.github.com/sahne/c36e835e7c7dbb855076

+0

да, я тоже думал то же самое. Но как я могу это исправить? – 2013-03-12 23:26:21

+0

вам нужно проверить, не '' tmpPtr-> next_number' не 'NULL' перед попыткой доступа к любому из его элементов. – dwalter

+0

кстати. вам также нужно установить 'tmpPtr' для следующего элемента в цикле или вы получите бесконечный цикл. – dwalter

1

для второго add, h-> next_number равен NULL, поэтому на первой итерации внутреннего цикла while вы разыскиваете NULL (псевдоним числа h-> next_number->).

Редактировать
При вставке 2-й пункт:
голова == хвост, так head-> следующая == NULL.
вы начинаете внутренний цикл:
head-> number == первый вставленный элемент.
head-> следующий == NULL.
head-> следующий-> номер == разыменованный NULL.

+0

Как мне удалить ссылку? – 2013-03-12 23:46:14

+0

См. Мой отредактированный ответ – EHuhtala

Смежные вопросы