Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BUG? VS++ под дебагом матерится на меня:) 
:(
    Опции темы
ASMatic
Дата 5.8.2009, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



Халло)

Написал прогу,ну почти написал, и тут на тебе выпрыгивают странные сообщение о баге в проге,которые особо както и не влияют на ход событий(прога дальше работает если нажать на Continue). Когда построил релиз версию и запускаю с под експлорера - все гуд. В чем может быть трабла не подскажите?

"падает" на строчке:

text = (PWCHAR)malloc( PASSWORD_LENGHT*sizeof(WCHAR) );

м название ф-ции куда указывает студия после глюка:

extern "C" static void * __cdecl _nh_malloc_dbg_impl 

ну и на добавок - прога пишется на Си - VS2008
а и главное забыл - несколько раз эта строчка проходит нормально,но вот после некой работы программы - вылетает прикреплённая снизу  сообщуха.....

зарание благодарен!

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  Bug.jpg 88,56 Kb
PM MAIL   Вверх
dumb
Дата 5.8.2009, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



heap ломаешь - записываешь в выделенный блок больше, чем выделил. уверен, что не (PASSWORD_LENGHT+1)*sizeof(WCHAR) ? lengTH, кстати.
PM MAIL   Вверх
ASMatic
Дата 5.8.2009, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



спасибо smile 
поправлю - "опечатка") и по всему прожекту ctrlC-ctrlV)

блин может быть и так что не при маллоке,но суть в том что когда пошагово дебажил вывалилось именно там)

но когда просто F5 и тетсить прогу - вываливается то там то сям....и не понять где запорол. Как мона поискать в таком вариатне - или просто код пересматривать весь полностью - только не это  smile 

ПС.  smile 
с width и height постоянно морочился что за чем,а теперьеще тут всплыло. Причем странно обычно когда не уверен пользуюсь переводчиком,но видать гугл( translate.google.com) и тут решил подогадоватся что я от него хочу smile  И так и так переводит, но думаю Вы мне правду говорите smile  - поправлю..


хотел еще спасиб сказать за внимательность! (PASSWORD_LENGTH+1) - он у меня +1 задефайнутый сразу был smile 

Это сообщение отредактировал(а) ASMatic - 5.8.2009, 03:20
PM MAIL   Вверх
dumb
Дата 5.8.2009, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



порча кучи у тебя происходит до этого malloc'а - он просто не может корректно отработать в условиях запорченной структуры кучи.

я не в курсе, какие в 2008 "плюшки" в DEBUG версии используются, но если прогон в среде DEBUG'а не дает точного места(или хотя бы с точностью до функции), то можно воспользоваться Application Verifier'ом.
PM MAIL   Вверх
ASMatic
Дата 5.8.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



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

DestroyWindow( hWnd );
UnregisterClass ( MyClass );

видать не правильно,т.к сделал на SW_SHOW/SW_HIDE и заработало без "кучи) + при многократном вкл/выкл окна пропала утечка памяти - одним выстрелом двух зайцев  smile 

спасибо за советики и за Application Verifier' . 

мож то тему переименовать на "Лучше окна скрывать чем удалять")))))))
PM MAIL   Вверх
GremlinProg
Дата 5.8.2009, 17:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(ASMatic @  5.8.2009,  13:54 Найти цитируемый пост)
видать не правильно,т.к сделал на SW_SHOW/SW_HIDE и заработало без "кучи) + при многократном вкл/выкл окна пропала утечка памяти - одним выстрелом двух зайцев

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

если до сих пор не понятно, то любой malloc и free ее вновь откроет, т.е. проблема у тебя не конкретно в этой строке:
Цитата(ASMatic @  5.8.2009,  04:16 Найти цитируемый пост)
text = (PWCHAR)malloc( ... );

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

дело твое, если не хочешь решать проблему, только не нужно ее перекладывать на чужие плечи,
DestroyWindow и UnregisterClass тут совершенно ни при чем


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ASMatic
Дата 10.8.2009, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



извиняюсь что "отходил". Возможно ты и прав - куча ламается,но как определить где я её ламаю?
Цитата

была произведена запись за границы другого блока памяти


если не трудно подскажите пожалуйста - как узнать что я вышел за границу и когда? может ссылку для почитания или подсказку для догадокsmile Хочу я однозначно узнать но вот прога работает и пока не прочитал сообщение выше то думал что трабла решена. Подскажите плз - буду рад узнать чего нового.
PM MAIL   Вверх
Earnest
Дата 10.8.2009, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Наверное, есть и другие способы узнать, где ломается куча, но я пользуюсь таким: просто расставляю по программе  ASSERT (_CrtCheckMemory()). Естественно, делать это лучшее не беспорядочно. Т.е. сначала "обложить" нехорошее место, т.е. найти 2 точки - первая, где хип в порядке и вторая - уже вылетает ассерт. И потом локализовать место, добавляя проверки.



--------------------
...
PM   Вверх
GremlinProg
Дата 10.8.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Earnest, предложила отличный вариант,
остается только поркомендовать наиболее прогрессивный путь на будущее: ознакомиться и активно использовать утилиты по контролю версий типа SVN или CVS, тогда любую ошибку такого рода можно отследить просто тестируя последние "слепки" программы


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
jonie
Дата 10.8.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Earnest такую штуку не смотрела ? http://www.microfocus.com/products/DevPart...heckerSuite.asp

я когда-то давно (когда NuMega компания называлась) пробывал (еще под vs2003) много чего интересного показывала...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
GremlinProg
Дата 10.8.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



устройство заголовка блока кучевой памяти - информация не такая уж секретная: http://www.securitylab.ru/analytics/216376.php
каждый заголовок маркируется на предмет его перезаписи,
только это не панацея, повредить блок  можно и в обход этих маркеров,

лучше всего вникнуть в проблемный код, чем искать под него костыли,
а еще лучше - проблемный код не писать вообще )


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 11.8.2009, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(jonie @  10.8.2009,  20:49 Найти цитируемый пост)
Earnest такую штуку не смотрела ?

Гм, нет, хотя слышала. Ихний профайлер, да, использовала, а до BoundChecker'а как-то руки не дошли: пока хватало простых способов для ловли багов.Только было начнешь лбом об стенку бится и кричать: ну все, берегись, ставлю баунд-чекер, как ошибка тут как тут: ой не надо, вот она я, дура, не буду больше... smile 


--------------------
...
PM   Вверх
jonie
Дата 11.8.2009, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Earnest  у меня было что в приложении с 150-200 потоками, съедавшее по 5-8 ГБ  памяти при работе на x64, раз в две-три недели происходил коллапс одного потока (Access Viоlation), после чего падали остальные потоки (где-то через часок работы) (притом падало только у клиента). С бондс чекером решили проблему за две недели где-то....оказалось в одном месте было нечто вроде (сейчас уже точно не помню) char*p = blablabla; *(p+10) = '\0';, которое и проводило к фатальной ошибке.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.