Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
21 / 21 / 0
Регистрация: 18.01.2010
Сообщений: 41

Ошибка "list iterator not decrementable" при удалении элемента из списка

24.12.2010, 18:53. Показов 3090. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При удалении элемента из списка (list) - ошибка list iterator not decrementable
Что делать?

C++
1
2
    for(Iter = npc.begin(); Iter != npc.end(); Iter++)
        delete (*Iter);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2010, 18:53
Ответы с готовыми решениями:

Ошибка: iterator not decrementable
компилятор ошибок не выдает, а когда программа начинает работать она периодически выдает такое сообщение - iterator not decrementable, не...

Ошибка C28182 при удалении элемента списка
#include <windows.h> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <locale.h> struct list { list*...

При удалении элемента из списка происходит непонятная ошибка
Приложила файл, который должен лежать в папке с кодом. При выполнении на первом поиске ищете "nazv1", и потом его удаляете. И...

10
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
24.12.2010, 19:05
Больше кода покажи.
0
21 / 21 / 0
Регистрация: 18.01.2010
Сообщений: 41
24.12.2010, 19:17  [ТС]
Объявление:

C++
1
2
        list <Sprite *> npc;
        list <Sprite *>::iterator Iter;
Движение чуваков:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    int xpos = (int)(pos.x + x);
    int ypos = (int)(pos.y + y);
 
    if(isValidLevelMove(xpos, ypos))
    {
        list <Sprite *>::iterator Iter;
 
        for(Iter = level->npc.begin(); Iter != level->npc.end(); Iter++)
        {
                if((*Iter != this && (int)(*Iter)->getX() == xpos && (int)(*Iter)->getY() == ypos))
                {
                    return false;
                }
        }
        erase(pos.x, pos.y);
 
        pos.x += x;
        pos.y += y;
 
        facingDirection.x = x;
        facingDirection.y = y;
 
        draw(pos.x, pos.y);
 
        if((int)goal->getX() == xpos && (int)goal->getY() == ypos)
        {
            goal->addLives(-1);
        }
 
        return true;
    }
    return false;
Обстрел чуваков:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(Sprite::move(facingDirection.x, facingDirection.y))
    {
        list <Sprite *>::iterator Iter;
 
        for (Iter = level->npc.begin(); Iter != level->npc.end(); Iter++)
        {
            if((*Iter)->classID != classID && (int)(*Iter)->getX() == (int)pos.x && (int)(*Iter)->getY() == (int)pos.y)
            {
                (*Iter)->addLives(-1);
                addLives(-1);
            }
        }
    }
    else
        addLives(-1);
Смерть чуваков:
C++
1
2
    for(Iter = npc.begin(); Iter != npc.end(); Iter++)
        delete (*Iter);
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
24.12.2010, 19:34
хм.. странно..
так попробуй..
C++
1
2
for(std::list<Sprite*>::iterator i = npc.begin(); i != npc.end(); ++i)
        delete *i;
0
21 / 21 / 0
Регистрация: 18.01.2010
Сообщений: 41
25.12.2010, 11:02  [ТС]
завтра отпишусь

Добавлено через 15 часов 8 минут
Нет, это не поможет
Я не могу понять почему не декрементируется.
Ошибка вылетает только когда последнего убиваешь!
Значит остается один элемент, но ведь это не проблема.
может проверку сделать?

Добавлено через 18 минут
Блин из-за чего такое может быть?
У меня ничего не получается
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.12.2010, 13:08
Полагаю лучше erase использовать...
0
21 / 21 / 0
Регистрация: 18.01.2010
Сообщений: 41
25.12.2010, 17:34  [ТС]
Нет erase не катит, я полагаю другие проблемы возникнут.

Добавлено через 1 минуту
Хотя можно переписать, попробую erase, отпишусь позже!
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.12.2010, 22:19
А кстати... Если полная очистка списка идет... Почему бы не npc.clear()?
0
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
25.12.2010, 22:21
какой-то извращенский способ удалять по указателю
присоединяюсь к ForEveR
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
25.12.2010, 22:34
ForEveR, sandye51, erase() и clear() удалят элементы списка, но не сами объекты!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <list>
 
class Bar{
    int i;
public:
    Bar(int a) :i(a) { 
        std::cout << "Bar( " << i << " )\n"; 
    }
    ~Bar() { 
        std::cout << "~Bar( " << i << " )\n";
    }
};
int main()
{
    std::list<Bar*> lst;
    std::list<Bar*>::iterator iter;
 
    for(int i = 0; i < 5; ++i)
        lst.push_back( new Bar(i) );
 
    lst.erase( lst.begin() );
 
    for(iter = lst.begin(); iter != lst.end(); ++iter)
        delete *iter;
 
    return 0;
}
http://codepad.org/aAgm1Dfy
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.12.2010, 22:41
ISergey, Хм. Тогда да. Не прав.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2010, 22:41
Помогаю со студенческими работами здесь

vector iterator not decrementable
Здраствуйте! Хочу вывести вектор задом-наперед, все нормально, но после того как оно выводит вектор сразу выскакивает ошибка vector...

Expression: vector iterator not decrementable
Требуется в двух файлах удалить повторяющие строки (до первого вхождения) Примеры: Name_N &lt;TEXT&gt; ...

Освобождение памяти при удалении элемента в List<T>
Доброго времени суток, уважаемые форумчане! Скажите пожалуйста, если присвоить значение элементу в листе как null, высвободится ли...

Массив List. Изменение индексов при удалении элемента
Подскажите пожалуйста немного по теорий массивов List. Допустим я создал 10 элементов, индексы (0 - 9). В каждое записал значение от 1...

Исключение при удалении элемента списка
При удалении элемента списка вызывается исключение: нарушение доступа для записи a-&gt;prev было 0xCDCDCDCD using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru