MD. KirkA 0 Жалоба Опубликовано September 11, 2012 Проблема появилась при разработке проекта в финальной его стадии. После 6,5 минут программа вылетает с повреждением стека. Последний кадр стека указывает на использование хранилища памяти типа CvMemStorage в функции update_mhi1 где то тут: cvCalcMotionGradient( mhi1, mask1, orient1, MAX_TIME_DELTA, MIN_TIME_DELTA, 3 ); if( !storage1 ) storage1 = cvCreateMemStorage(0); else cvClearMemStorage(storage1); Долго искал соответствующую тему - так и не нашел. Пожалуйста, помогите. З.Ы.: в прикрепленном файле листинг (Visual C++, MS VS 2010 с использованием MFC и OpenCV 2.4.2). Для его создания использовалось руководство от Smorodov и maximator по OpenCV+MFC (без использования потоков, но с таймером) + книга O'Reilly и пример по кодовой книге (update_mhi). Ошибка возникает при Release версии, при Debug может и не вылезти. Но тут, как понимаете, итоговой программы не будет без Release. code-cpp.txt Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 11, 2012 подробно посмотрю завтра, пока что такие соображения: storage1 в начале нулю равен? и нужно проверить равен ли он нулю после cvClearMemStorage(storage1); если нет, то дописать storage1=0; Какие типы библиотек прилинкованы? Тип должен соответствовать типу проекта (Release/Debug). Глянул по-быстрому. Вот такие вещи могут вызывать случайные ошибки: IplImage* silh; CvSeq* seq;[/code] нужно их инициализировать нулями. [code] IplImage* silh=0; CvSeq* seq=0; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MD. KirkA 0 Жалоба Опубликовано September 12, 2012 Прилинковано всё по мануалу - для Release opencv_*242.dll, для Debug opencv_*242d.dll. В остальных соображениях по инициализации разберусь по прибытию на работу, попробую... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано September 12, 2012 вообще для отладки таких проблем можете использовать профилировщики, если работаете в линуксе valgrind, если в windows, конечно, посложнее найти бесплатное, либо gprof прикрутить, но он не очень информативен, либо, например, VTune. С сайта интел можно скачать пробную версию на месяц. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MD. KirkA 0 Жалоба Опубликовано September 12, 2012 Изначально storage1=0. Если ставить storage1=0 после очистки ClearMemStorage, то программа вылетает сразу же. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MD. KirkA 0 Жалоба Опубликовано September 12, 2012 присвоение нулевых значений для silh и seq тоже результата не дало. всё по прежнему печально Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MD. KirkA 0 Жалоба Опубликовано September 12, 2012 вообще для отладки таких проблем можете использовать профилировщики, если работаете в линуксе valgrind, если в windows, конечно, посложнее найти бесплатное, либо gprof прикрутить, но он не очень информативен, либо, например, VTune. С сайта интел можно скачать пробную версию на месяц. попробую. Но моя проблема пока что актуальна. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MD. KirkA 0 Жалоба Опубликовано September 12, 2012 (изменено) Нежданчик. Проблема решена. Дело в таймере и создании новых и новых утечек. update_mhi, draw_data и файловые потоки ни при чем. Изменено September 12, 2012 пользователем MD. KirkA Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах