![]() |
|
|
![]()
|
|
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Суть проблемы заключается в том, что при дебаге(F5) у меня мусор уберается просто идеальном, а вот при запущеном приложении(CTRL + F5) падает из-за невалидности указателей. Я понимаю что звучит странно но я незнаю как спросить иначе.
Структура имеет вид:
убираю мусор:
-------------------- Never again... |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Скорее всего в этих указателях что-то нехорошее (неинициализированы). При дебаге вполне там могут быть нули. Так что смотри там, где инициализируешь указатели на Color. Например, если ты увеличиваешь размер массива указателей, но не инициализируешь все новые значения, там вполне может быть грязь. Что-то вроде этого.
-------------------- ... |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Earnest, Нет все указатели инициализированны, я смотрю дебагом в значения что по них лежат, там все правельно.
Очистку провожу в деструкторе ксатити, екзеплер переменной лежит в MainFrame в разделе private. -------------------- Never again... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Но ведь релиз говорит тебе, что указатель невалидный...
Попробуй распечатывать значения перед удалением и ищи где лажа... -------------------- ... |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Earnest, да мне не релиз а дебаг версия говорит что лажа. А что печатать? Сам указатель? Ну и понту мне с него, тоесть с адреса его, тоесть с адреса на который он указывает?
Я знаю что он не валидный! Но почему при F5, тоесть когда я с прожкой запускаю дебаггер то все чудесно, цветочки, мир ии все друг-друга любят, все валидны и счастливы! А вот когда CTRL + F5 то все счастливы до деструктора а потом приходят невалидные указатели и ламают всем(тоесть мне) кайф! Пойду куплю веревку, уже 4 день еб... мучаюсь и ничего не выходит -------------------- Never again... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А, оба раза дебаг? Не надо вешаться, все там были. Главное, всегда помнить: мистики нет, есть ошибка.
Терпи и вырабатывай интуицию... потом позвоночником начнешь ошибки искать... Распечатывай, конечно, содержимое... хотя и по значению указателя иногда видно, что он левый... Я полагаю, что указатели портятся где-то еще, т.к. приведенный тобою код удаления вроде нормальный. В зависимости от величины программы, я бы попробовала (в следующем порядке): 1) просмотреть код, который теоретически может портить указатели и попытаться логически найти ошибку 2) комментировать другие куски кода (оставляя заглушки вместо нужных функций), пока не обнаружится тот, кто приводит к порче. Начать с комментирования всего, кроме создания и удаления. 3) Используя ф-ю heapwalk написать проверку валидности указателей в массивах. Затем вставлять ее в разных точках и искать, где портится. -------------------- ... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
ну и я свои 5 копеек вставлю: есть такая замечательная програмка BoundsChecker. она, кроме всего прочего, умеет и неправильные операции над указателями отслеживать...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Earnest, суть в том что при обращении к невалидному указателю все завалиться, тоесть я не могу посмотреть "Что же там".
Код сейчас составляет загрузку их xml и при завершении программы выгрузку в xml изменений, Которых небыло. Тоесть испортиться если он создался его может только винда и любимая студия. Тоесть я создаю в памяти сию структуру(и я ее создаю и пишу в нее правильные значения так говорит великий дебаггер), а потом жестоко уничтожаю при закрытии программы(и по словам тоже авторитета дебаггера это у меня все правильно тоже). Но вот косяк я не могу конечному пользователю об'яснить что ему надо будет запускать прогу теперь из под дебагерра По существу. 1 - сейчас и знамаюсь. 2 не столько еще наворотил 3. Можна ли поподробнее? _hunter, Спасибо не знал етого. Щя буду ставить. -------------------- Never again... |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Нашел где косяк. Не могу понять почему!
вызывается на 1-н раз больше чем надо! Там записываю одно значение, функцией Add а в деструкторе вызывается два! Не понимаю почему -------------------- Never again... |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вовсе не всегда, только если указатель показывает в защищенную область, но тогда это по указателю видно.
С чего ты взял? Испортиться может что угодно - достаточно, чтобы какой-то левый код записал что-то не в свою память. Кто именно? В mapIdColorRTU лишние значения? Или в его значениях? Сам цикл подозрений не вызывает - он работает столько раз, сколько говорит GetSize - если, конечно ты внутри цикла не химичишь с размером массива. Стало быть, ищи где лишнее значение туда попадает. Может, когда ты Add вызываешь, там что-то уже есть? Выводи размер при добавлении и при удалении. -------------------- ... |
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Нашел багу
Earnest и _hunter жду вас господа короче, вместо
Нужно было
И ничего не валится. Хотя муть-то полная, а вот кто пояснит мне почему срабатывало когда было неправильно!? Ведь не долно ж юыло так работать! Я уже совсем запутался Это сообщение отредактировал(а) Nuzur - 22.1.2007, 18:39 -------------------- Never again... |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |