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

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

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

Как пользоваться отладчиком? C++
C++ Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании)
C++ исправить ошибку в коде, пожалуйста, кому не сложно
C++ Найти ошибки! Если не сложно подскажите)
C++ В строках матрицы с отрицательным элементом на главной диагонали найти наибольший из всех элементов (найти ошибку в коде)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 13:52     Сложно найти ошибку отладчиком #2
Ну так ты итерируй аккуратнее!
Надеюсь, в цикле сравниваешь на !=, а не на < ?
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++ )
Надо < ?)))
< Подчёркивает, нельзя.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2012, 14:12     Сложно найти ошибку отладчиком #4
Цитата Сообщение от chelovek7114 Посмотреть сообщение
Надо < ?)))
Не надо.)

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

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

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

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

C++ Найти сумму первых n-четных натуральных чисел (найти ошибку)
Как пользоваться отладчиком (в Visual Studio) C++
C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку

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

Или воспользуйтесь поиском по форуму:
chelovek7114
4 / 4 / 1
Регистрация: 30.09.2012
Сообщений: 35
12.12.2012, 14:04  [ТС]     Сложно найти ошибку отладчиком #11
Ошибку нашёл, оказывается она раньше была, просто надо было последние изменения тестировать, а не всё подряд))
Там итератор должен в любом случае найти объект и выйти из цикла, а он не нашёл. Я просто обращение прям в цикл перед бриком поставил, хоть какое-то решение...
Спасибо за оперативный ответ, Deviaphan.
Yandex
Объявления
12.12.2012, 14:04     Сложно найти ошибку отладчиком
Ответ Создать тему
Опции темы

Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru