Перейти к содержимому
Compvision.ru
MD. KirkA

Проблема с динамической памятью

Recommended Posts

Проблема появилась при разработке проекта в финальной его стадии. После 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

подробно посмотрю завтра, пока что такие соображения:

storage1 в начале нулю равен?

и нужно проверить равен ли он нулю после cvClearMemStorage(storage1);

если нет, то дописать storage1=0;

Какие типы библиотек прилинкованы? Тип должен соответствовать типу проекта (Release/Debug).

Глянул по-быстрому. Вот такие вещи могут вызывать случайные ошибки:

	IplImage* silh;
CvSeq* seq;[/code] нужно их инициализировать нулями.
[code] IplImage* silh=0;
CvSeq* seq=0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прилинковано всё по мануалу - для Release opencv_*242.dll, для Debug opencv_*242d.dll.

В остальных соображениях по инициализации разберусь по прибытию на работу, попробую... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообще для отладки таких проблем можете использовать профилировщики, если работаете в линуксе valgrind, если в windows, конечно, посложнее найти бесплатное, либо gprof прикрутить, но он не очень информативен, либо, например, VTune. С сайта интел можно скачать пробную версию на месяц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изначально storage1=0. Если ставить storage1=0 после очистки ClearMemStorage, то программа вылетает сразу же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

присвоение нулевых значений для silh и seq тоже результата не дало.

1e229bef94510bcc8b7555b3358eb10b.png

всё по прежнему печально

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вообще для отладки таких проблем можете использовать профилировщики, если работаете в линуксе valgrind, если в windows, конечно, посложнее найти бесплатное, либо gprof прикрутить, но он не очень информативен, либо, например, VTune. С сайта интел можно скачать пробную версию на месяц.

попробую. Но моя проблема пока что актуальна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нежданчик. Проблема решена. Дело в таймере и создании новых и новых утечек. update_mhi, draw_data и файловые потоки ни при чем.

Изменено пользователем MD. KirkA

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×