22.01.2020, 20:07 [+3 UTC]
в нашей команде: 4 162 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.80 (15.01.2020)
JS-v.1.35 | CSS-v.3.36

Общие новости:
06.01.2020, 22:45

Форум:
13.01.2020, 16:40

Последний вопрос:
22.01.2020, 20:00
Всего: 151448

Последний ответ:
22.01.2020, 10:24
Всего: 259658

Последняя рассылка:
22.01.2020, 19:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
06.04.2010, 17:32 »
Anjali
Всё именно так и получилось! [вопрос № 177703, ответ № 260639]
25.11.2010, 21:35 »
Варвара
точно,спасибо огромное!!! [вопрос № 180943, ответ № 264330]
15.01.2011, 15:49 »
Глух
спасибо, получилось [вопрос № 181886, ответ № 265430]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 855
Gluck
Статус: Студент
Рейтинг: 491
solowey
Статус: Специалист
Рейтинг: 272

Перейти к консультации №:
 

Консультация онлайн # 144943
Раздел: • С / С++
Автор вопроса: Вячеслав Шинкаренко
Отправлена: 24.09.2008, 23:56
Поступило ответов: 1

Здравствуйте эксперты.
Помогите пожалуйста отладить код. Не пойму почему ошибка возникает во время выполнения.
Программа должна формировать в векторе список файлов, точнее указателей на структуры с именами и размерами файлов, только имена файлов должны быть не в разброс, как это получилось бы при рекурсивном вызове, а в формате: список_файлов_папки_1, список_файлов_папки_2, .. и т.д.

Без рекурсии работает, как только рекурсивный вызов добавляю во время выполнения выскакивает ошибка. Что-то я с итераторами напутал..
Visual Studio 2005

Приложение:

Состояние: Консультация закрыта

Ответ # 230220 от Sk0rp

Здравствуйте, Вячеслав Шинкаренко!

проблема в валидности итератора, вы его присваиваете при входе в процедуру и потом рекурсивно вызываете её же, и внутри происходят вставки в вектор при которых вектор переаллокируется и ранее взятые итераторы (по сути указатели в случае вектора) ссылаются уже на освобожденную память.

Но самое интересное, что он вам вообще не нужен в данном случае, удалите строчку:
vector <Sfile*>::iterator it=Vfile.end();
а строку:
Vfile.insert(it, st);
замените на
Vfile.push_back(st);

и все будет работать


Консультировал: Sk0rp
Дата отправки: 25.09.2008, 00:31

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15310 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.80 от 15.01.2020
Версия JS: 1.35 | Версия CSS: 3.36