Форум программистов CodeGuru
25 Сентябрь 2018, 20:43:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: MFC assert winhand.cpp  (Прочитано 5290 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Pblcya
Новичок
*
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« : 28 Май 2014, 00:43:28 »

Всем здравствуйте! Пишу программку с использованием MFC в VS 6.0 - математическая модель одного устройства. Подается сигнал, обрабатывается, считается спектр, выводится в файл, ничего особо сложного. Но именно сегодня, когда почти все ошибки исправлены, возникла такая проблема:
Если количество отсчетов сигнала, скажем, 3000 - все нормально считается, выводится, строятся красивые графики. Но если взять количество отсчетов равным 102400 (а именно столько и нужно!), то прога стала выпадать с ассертом в winhand.cpp line 209 (как раз когда считаются эти самые отсчеты). При этом в папке с проектом генерится куча каких-то файлов без расширения и с рандомными названиями от 1 символа, кириллицей и латиницей. Раньше такого не было! Считалось и в 2 раза больше отсчетов! Никаких серьезных изменений в программу не вносилось, изменения в формулах не считаются.
Если в самом начале просто вылетал ассерт и создавалось с десяток странных файлов, то сейчас комп продолжает что-то писать в файл с именем НННННННННННННННН и останавливаться, похоже, не собирается Грустный Что мне делать? В чем может быть проблема? Гугление ощутимых результатов не дало Грустный так что прошу вашей помощи.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 28 Май 2014, 12:29:18 »

то прога стала выпадать с ассертом в winhand.cpp line 209

Это надо смотреть что в этом файле, сейчас сорцев нет под рукой mfc.

При этом в папке с проектом генерится куча каких-то файлов без расширения и с рандомными названиями от 1 символа, кириллицей и латиницей. Раньше такого не было!

Хм... точно не приложение генерирует эти файлы?
Вы же знаете, какие файлы приложение создавать может, какие нет?
Может, это аварийные дампы?

Если в самом начале просто вылетал ассерт и создавалось с десяток странных файлов, то сейчас комп продолжает что-то писать в файл с именем НННННННННННННННН и останавливаться, похоже, не собирается Грустный

В смысле "не собирается" ?
Оно же работает ?  Не в себе

Что мне делать?

Нужно под отладчиком посмотреть стек вызовов. Откуда падает.

В чем может быть проблема? Гугление ощутимых результатов не дало Грустный так что прошу вашей помощи.

Ну, если погуглить, то первой ссылкой идет "ASSERT failed file: winhand.cpp, line 205", т.е. уже близко. Там говорится что где-то в функции CHandleMap::RemoveHandle. Судя по всему, эта функция вызывается из деструкторов объектов окон (не уверен) и при удалении временных объектов окон (короче то что понаследовано от CWnd).


Вероятные причины (первое что на ум приходит).
1. Где-то портится память (перезаписываюся данные удаляемых впоследствии объектов, унаследованных от CWnd).
2. Объекты неправильно удаляются (по указателю на CWnd удаляется объект, окном не являющийся).

А так - это надо с отладчиком смотреть.
Записан

Pblcya
Новичок
*
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #2 : 28 Май 2014, 14:08:31 »


Хм... точно не приложение генерирует эти файлы?
Вы же знаете, какие файлы приложение создавать может, какие нет?
Может, это аварийные дампы?
Точно не приложение. На выходе у меня один txt (или два, но их количество и имена я задаю сама). А создаваемые файлы вообще без расширения и с именами типа "'ээээээюъ", "НННННН", "dsisx" и так далее. И не дампы это точно.

В смысле "не собирается" ?
Оно же работает ?  Не в себе
Оно не собирается останавливаться Улыбка то есть пишет, и пишет, и пишет... Но я забыла в начале сказать, что это было в дебаг-режиме, соответственно при остановке дебаггера и запись остановилась.

Нужно под отладчиком посмотреть стек вызовов. Откуда падает.
Вот под отладчиком как раз и даже до конца алгоритма не удалось дойти.

Ну, если погуглить, то первой ссылкой идет "ASSERT failed file: winhand.cpp, line 205", т.е. уже близко. Там говорится что где-то в функции CHandleMap::RemoveHandle. Судя по всему, эта функция вызывается из деструкторов объектов окон (не уверен) и при удалении временных объектов окон (короче то что понаследовано от CWnd).
Это я читала, и даже где-то про 209 строку видела. Но как именно исправить ошибку - не нашла.

Вероятные причины (первое что на ум приходит).
1. Где-то портится память (перезаписываюся данные удаляемых впоследствии объектов, унаследованных от CWnd).
2. Объекты неправильно удаляются (по указателю на CWnd удаляется объект, окном не являющийся).

А так - это надо с отладчиком смотреть.

Я сейчас откатилась на более раннюю версию проги, пошагово переделываю заново и проверяю по ходу. Вроде вернулась на тот же уровень - пока все нормально, не вылетает. Еще антивирусником прошлась - нашел generic.dx!, не могла быть проблема в вирусе? Уж больно похоже.

Спасибо большое за ответ!
Записан
Pblcya
Новичок
*
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #3 : 28 Май 2014, 15:01:18 »

Удивительно, но, похоже, проблема была не в вирусе. Попробовала запустить ту версию программы, которая вылетала - все по-прежнему, генерится куча файлов. А вот в той, которую переделала, все отлично. Значит, проблема в кривых руках, правда, не знаю, где. Но уже неважно Улыбка
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!