Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Free Heap block modified at after it was freed


Автор: Ashlander 7.9.2006, 13:08
Здравствуйте All,

пишу проектик с использованием MFC, и при дебаге проекта получаю вылет с сообщением студии

Цитата

HEAP: Free Heap block cca9b8 modified at ccab4c after it was freed


1) места где происходит вылет разные, коменчу одно вылезет в другом... многопоточность не использую
2) _heapchk до самого вылета говорит, что все ок
3) проблем с массивами не наблюдаю... пока правда это единственная подходящая причина
4) самое смешное при запуске самой дебаг версии вылет не происходит при аналогичных "вредоносных"  действиях 

короче "полный привет..." (с)

может у кого идей будут посвежей ? заранее спасибо

Автор: _hunter 7.9.2006, 13:20
поставь bounds checker-- может что-то увидиш...

Автор: Ashlander 7.9.2006, 16:08
Только обратил внимание на диалог который выскакивал при этом :
User breakpoint called from code at... Вот нагуглил... 

Цитата

В процессе отладки постоянно вываливается следующее сообщение: User breakpoint called from code at 0xADDRESS. При этом открывается окно дизассемблера. В ассемблере я, увы, не силен.
Суть в том, что все бреки давно убраны, относительно лишние файлы (*.ncb;*.opt) также убраны. Пробовал build, rebuild, clean + rebuild, перезапускал и студию, и систему - глухо.
Ладить невозможно... :/ Подскажите что-нить...


Цитата

Такое бывает при повреждении памяти. Скажем, есть поврежденный блок и вы вызываете функцию размещения или особождения памяти. Memory mamager тогда выкидывает INT 3, что заставляет отладчик остановиться. Какой стек вызова? Если дело кончается в ntdll, то скорее всего память попорчена.


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

Автор: _hunter 7.9.2006, 16:44
можно, конечно и забить (особенно если иенструментов для поиска бага нету). но если приложение планируется серьезное -- забить не прокатит)

Автор: Ashlander 7.9.2006, 17:04
Цитата

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

вот так всегда... эх...  smile 

...кстати единственное, что осталось для себя выяснить, что означает фраза "память попорчена" ... это логический или физический дефект... я конечно понимаю, физический мне не светит... ну не может мне так сегодня повезти... но продебагить на другой машинке стоит  smile 

Автор: _hunter 7.9.2006, 18:05
логический -- где-то кто-то не туда что-то записал...

Автор: Ashlander 7.9.2006, 22:02
Цитата
логический -- где-то кто-то не туда что-то записал...

мда... так оно и есть ,...
Цитата
 HEAP: Free Heap block cca9b8 modified at ccab4c after it was freed
 
только освобождаю я уже кильнутое... ну да ладно... найду грабли - покажу бланш  smile 

Автор: Ashlander 9.9.2006, 14:41
вроде как нашел... 

не обнулялся указатель на динамически созданный обьект после его удаления... позже память забиралась под другой обьект, и модифицировалась "злодеем" указателем...

...а причина, как оказалось - не внес функцию в приватовскую секцию класса, после чего с успехом ее и использовал вместо заготовки...  smile 

минус: пришлось вручную перелопатить весь код...  smile 

спасибо всем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)