Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
1

Сложно найти ошибку отладчиком

11.12.2012, 13:44. Просмотров 461. Ответов 10
Метки нет (Все метки)

Здравствуйте, столкнулся с такой проблемой, в курсовой вылетает иногда ошибка
list iterator not dereferencable
Понятно, что это итератор вероятно вышел за границы контейнера.
Причём через раз всё прорабатывает нормально (присутствует рандом))).
А в отладчике, как известно, место такой ошибки не показывает.
А пробежать по всему коду не реально ( много всяких циклов )
Так вот можно ли средствами MVS 2010 эту ошибку найти, хотя бы в каком операторе возникает?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 13:44
Ответы с готовыми решениями:

исправить ошибку в коде, пожалуйста, кому не сложно
очень срочно исправить ошибку в коде, пожалуйста, кому не сложно #include...

Найти ошибки! Если не сложно подскажите)
в этой программке упаковки кода есть ошибка, какая не пойму #include <stdio.h>...

Найти ошибку в программе: в visual studio выдает ошибку
#include <math.h> #include <conio.h> #include <iostream> using namespace...

Как пользоваться отладчиком?
Вот код. В книжке написано: "поставьте точку останова Отладчика на оператор j=i...

Как пользоваться отладчиком?
Дайте ссылку на хороший материал или литературу

10
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 13:52 2
Ну так ты итерируй аккуратнее!
Надеюсь, в цикле сравниваешь на !=, а не на < ?
0
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
11.12.2012, 14:02  [ТС] 3
Так это курсовая, там этих циклов милион вложеных)))
А итерирую на подобии
for( iter_main = main_list.begin() ; iter_main != main_list.end() ; iter_main++ )
Надо < ?)))
< Подчёркивает, нельзя.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 14:12 4
Цитата Сообщение от chelovek7114 Посмотреть сообщение
Надо < ?)))
Не надо.)

Внутри цикла инкремент итератора присутствует? Во вложенных циклах имена итераторов с именами во внешних циклах не совпадают? После цикла итератор не используется?

В приведённом тобой цикле выхода за границы контейнера быть не может, если ответы на вышезаданные вопросы отрицательны.
1
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
11.12.2012, 14:33  [ТС] 5
Поколдовал, так и осталось. На первые два вопроса ответ нет, а вот после цикла порой итератор используется, но не меняется, вроде всё корректно.
А нет такого тестеровщика какого-нибудь, который во все функции зайдёт, и покажет в каком операторе ошибка?
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.12.2012, 15:16 6
так ты бряки расставь и минимузируешь область поиска ошибки
0
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
11.12.2012, 15:34  [ТС] 7
так ты бряки расставь и минимузируешь область поиска ошибки
Да это понятно, я пол дня уже этим занимаюсь...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 15:40 8
Цитата Сообщение от chelovek7114 Посмотреть сообщение
а вот после цикла порой итератор используется
Цикл завершается, когда итератор равен end()? Или досрочно выходишь?

И что тебе мешает от места падения по стэку подняться и посмотреть, в каком месте итератор ошибочный используется?

Цитата Сообщение от chelovek7114 Посмотреть сообщение
А в отладчике, как известно, место такой ошибки не показывает.
С каких пор? Прям на строке с ошибкой всё и упадёт.
1
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
11.12.2012, 15:53  [ТС] 9
Цикл завершается, когда итератор равен end()? Или досрочно выходишь?
Выхожу досрочно.
И что тебе мешает от места падения по стэку подняться и посмотреть, в каком месте итератор ошибочный используется?
Так все функции прорабатывают, и где и почему возникает ошибка я так и не нашёл.
Всё началось после того как я main в класс переделал и другой main написал, чтоб в форму потом перенести))
Вроде всё проверил...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 16:23 10
Статические или не инициализированные переменные в процессе этого переделывания не создались случаем?
1
chelovek7114
4 / 4 / 2
Регистрация: 30.09.2012
Сообщений: 35
12.12.2012, 14:04  [ТС] 11
Ошибку нашёл, оказывается она раньше была, просто надо было последние изменения тестировать, а не всё подряд))
Там итератор должен в любом случае найти объект и выйти из цикла, а он не нашёл. Я просто обращение прям в цикл перед бриком поставил, хоть какое-то решение...
Спасибо за оперативный ответ, Deviaphan.
0
12.12.2012, 14:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 14:04

Научите пользоваться отладчиком на линуксе
Привет ребята стоит у меня линукс пишу программы через vim и запускаю их через...

Помогите найти ошибку: По двум сторонам и углу найти все остальное
Доброго времени суток. В универе дали задание написать программу &quot;По двум...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru