Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
chelovek7114
4 / 4 / 1
Регистрация: 30.09.2012
Сообщений: 35
#1

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

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

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

исправить ошибку в коде, пожалуйста, кому не сложно - C++
очень срочно исправить ошибку в коде, пожалуйста, кому не сложно #include <iostream> using namespace std; int sumElem( int SIZE, int...

Найти ошибки! Если не сложно подскажите) - C++
в этой программке упаковки кода есть ошибка, какая не пойму #include <stdio.h> int main(void){ char с; /* код стану */ char f; /*...

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include <math.h> #include <conio.h> #include <iostream> using namespace std; int main() { double x, E, ypred, y, S; ...

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

Как пользоваться отладчиком? - C++
Вот код. В книжке написано: "поставьте точку останова Отладчика на оператор j=i и в цикле работы getline() убедитесь, что переменная j...

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

10
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 13:52 #2
Ну так ты итерируй аккуратнее!
Надеюсь, в цикле сравниваешь на !=, а не на < ?
0
chelovek7114
4 / 4 / 1
Регистрация: 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
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 14:12 #4
Цитата Сообщение от chelovek7114 Посмотреть сообщение
Надо < ?)))
Не надо.)

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

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

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

Цитата Сообщение от chelovek7114 Посмотреть сообщение
А в отладчике, как известно, место такой ошибки не показывает.
С каких пор? Прям на строке с ошибкой всё и упадёт.
1
chelovek7114
4 / 4 / 1
Регистрация: 30.09.2012
Сообщений: 35
11.12.2012, 15:53  [ТС] #9
Цикл завершается, когда итератор равен end()? Или досрочно выходишь?
Выхожу досрочно.
И что тебе мешает от места падения по стэку подняться и посмотреть, в каком месте итератор ошибочный используется?
Так все функции прорабатывают, и где и почему возникает ошибка я так и не нашёл.
Всё началось после того как я main в класс переделал и другой main написал, чтоб в форму потом перенести))
Вроде всё проверил...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 16:23 #10
Статические или не инициализированные переменные в процессе этого переделывания не создались случаем?
1
chelovek7114
4 / 4 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Помогите найти ошибку: По двум сторонам и углу найти все остальное - C++
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между ними в треугольнике АВС найти два остальных...

Найти сумму первых n-четных натуральных чисел (найти ошибку) - C++
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не правильно код составил, алгоритм не тот...

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде) - C++
#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int y = 0; for(int i = -21; i &lt; -99; i+=3) ...


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

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

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