Рейтинг:
1
raddevus
Попробуйте разбить следующую строку на две строки:
struct node *temp,*t;
Сделай это:
struct node *temp;
struct node *t;
Просто попробуйте это, перестройте и бегите посмотреть, что произойдет.
Мне интересно, не объявляется ли структура * должным образом.
Рейтинг:
0
Rick York
Во-первых, вы должны использовать отладчик, чтобы исправить это. Он быстро покажет вам, в чем именно заключается проблема. Если у вас его нет с вашим компилятором, то получите тот, который есть. Visual Studio 2017 community edition доступна бесплатно, т. е. бесплатно.
Я предполагаю, что ошибка вызвана тем, что t является недопустимым, и вы откладываете недопустимый указатель.
Попробуйте настроить свой цикл так, чтобы вы отображали вещи в каждой итерации :
// ...
for( i = 0; i < n; ++i ) // I prefer a for loop for this
{
// ... logic goes here
printf( "i is %d, count is %d\n", i, count );
showoff();
count++;
}
Member 13954179
Да, я использовал отладчик, и он показывает, что есть какая-то проблема с"while(t - >link!=NULL)".
Сообщение об ошибке "программа получила сигнал SIGSEGV,ошибка сегментации"
Member 13954179
Итак, я понял, что проблема заключается в указателе t, но теперь что? Я буквально не знаю, что это такое. Я имею в виду логически программа права
Rick York
В этот момент Вы должны пройти через программу и наблюдать за всем, что она делает, чтобы вы могли видеть, где она становится недействительной. Если это происходит в течение некоторого времени, то вы можете добавить операторы trace или printf для отображения важной информации. Это одна из самых трудных вещей, чтобы узнать о программировании, и это отладка того, что вы написали. В конце концов вы научитесь методам, которые помогут вам писать код, который легче отлаживать.
Rick York
У вас есть функция показухи. Я бы переместил его так, чтобы он отображал вещи после каждой итерации, чтобы вы могли убедиться, что вы правы с каждым из них. Также покажите счетчик, пока вы на нем находитесь. Эти вещи хорошо помогают вам лучше видеть, что происходит, и это ключ к отладке : смотрите, что происходит со всеми вашими данными. Я скорректирую свое первое решение, чтобы вы могли лучше понять, что я имею в виду.
Member 13954179
Спасибо наконец то я его получил
Rick York
Что вы сделали, чтобы исправить это?
Member 13954179
Когда приходит условие, что count > 1, t остается нулевым. Поскольку я установил t = head в начале основной функции, в for loop head изменяется, но t не обновляется и все еще содержит нулевое значение, поэтому я установил t = head в области видимости для if (count>1). И проблема решена. Спасибо всем