![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.12.2012
Сообщений: 8
|
![]()
есть код:
Код:
Код:
Последний раз редактировалось Pomogi; 06.07.2013 в 20:02. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,609
|
![]()
Какой задача была изначально? Возможно, создание элемента структуры ошибка, так как указатель меняет адрес и память не освобождается (происходит утечка памяти)
Не делается проверки next на 0 что будет вызывать падение программы, если в списке только один элемент. Если n <= 1 то список становится несвязным, и теряется все после head. d->next указывает на деревню дедушке, то есть в никуда. Если n = 2 то выполнение будет состоять из следующих операторов: d=new node; p=head; p=p->next; // переход на следующий элемент списка d=p->next;// переход на следующий элемент списка p->next=d->next;// переход на следующий элемент списка delete d; head - это, наверное, указатель на начало списка. Если это не так, то поведение функции непредсказуемо, и неизвестен результат выполнения операторов. Будем предполагать, что head все-таки указывает на начало списка и в списке не один элемент. Так как если элемент один, произойдет падение программы на операторе p=p->next; так как следующего элемента попросту нет. Если в списке 2 элемента, то у нового p нет последующего элемента, и снова произойдет падение программы на операторе d=p->next;. При этом то на что указывает d при создании нового элемент списка d=new node теоряется в пустоту и происходит утечка памяти Если в списке 3 элемента, то у нового d нет последующего элемента, и падление программы произойдет на операторе p->next=d->next. Если в списке 4 и более элементов то выполнение куска кода будет успешным. p=head; // p указывает на первый элемент списка p=p->next; // p указывает на второй элемент списка d=p->next; // d указывает на третий элемент списка p->next=d->next; // p->next указывает на четвертый элемент списка delete d; // удаляется третий элемент списка Таким образом, в случае n = 2 программа может удалить третий элемент списка Если n = 3 то выполнение будет состоять из следующих операторов: node *d; d=new node; p=head; // p указывает на первый элемент списка p=p->next; // p указывает на второй элемент списка d=p->next; // d указывает на третий элемент списка p=p->next; // p указывает на третий элемент списка d=p->next; // d указывает на четвертый элемент списка p->next=d->next; // p->next указывает на пятый элемент списка delete d; // удаляется четвертый элемент списка
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 26.12.2012
Сообщений: 8
|
![]()
вот вся программа:
Код:
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,609
|
![]()
После del(y); нужно уменьшить n на единицу оператором n--, так как далее в цикле for считается по старому и на p=p->next происходит падение.
Функцию del можно переписать в следующем виде: Код:
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объясните функцию c_str | PotatoCaptain | Общие вопросы C/C++ | 4 | 01.08.2024 07:50 |
c++ написать функцию удаления последнего элемента из списка | scrinn | Помощь студентам | 0 | 04.06.2012 23:56 |
Описать функцию нахождения расстояния между 2-мя точками на плоскости, заданными своими координатами, и функцию .... | zzz6 | Помощь студентам | 2 | 06.07.2011 08:24 |
Сумма ряда с точностью Е=10-4, Сформировать обномерный массив, написать функцию для удаления строки... | Dasha M | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 06.05.2011 18:33 |