Утечка памяти при использовании OpenCV CascadeClassifier

Я пишу программу, которая использует PCL Kinfu, и я использую OpenCV распознавания лиц. У меня были некоторые проблемы с кучей, поэтому я выделил код openCV, чтобы попытаться проверить, есть ли проблема там. Прокомментировав почти все, я наткнулся на что-то странное. Существует только глобальное объявление класса ‘CascadeClassifier’, и это заставляет valgrind предупреждать о возможных потерянных и все еще достижимых блоках. Комментирование этой декларации работает нормально. Я действительно не уверен, что происходит, и был бы признателен за любую помощь.
Я прилагаю свой проблемный код (без закомментированных частей).
Спасибо!

#include "opencv2/objdetect/objdetect.hpp"
using namespace cv;
CascadeClassifier c;

int main() {
return 0;
}

**Valgrind output:**
==3316== Memcheck, a memory error detector
==3316== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==3316== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==3316== Command: ./test
==3316==
==3316==
==3316== HEAP SUMMARY:
==3316==     in use at exit: 297,370 bytes in 1,393 blocks
==3316==   total heap usage: 3,446 allocs, 2,053 frees, 655,130 bytes allocated
==3316==
==3316== LEAK SUMMARY:
==3316==    definitely lost: 0 bytes in 0 blocks
==3316==    indirectly lost: 0 bytes in 0 blocks
==3316==      possibly lost: 4,676 bytes in 83 blocks
==3316==    still reachable: 292,694 bytes in 1,310 blocks
==3316==         suppressed: 0 bytes in 0 blocks
==3316== Rerun with --leak-check=full to see details of leaked memory
==3316==
==3316== For counts of detected and suppressed errors, rerun with: -v
==3316== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

0

Решение

Для меня есть два возможных объяснения:

  1. Если вы доверяете Valgrind — возможно, это какая-то утечка в коде opencv, и поэтому кто-то должен исследовать его более подробно из разработчиков opencv (почему бы вам не создать соответствующий тикет с этой проблемой?)

или же

  1. Нет никакой утечки, потому что у вас явно есть слово «возможно». И тогда тебе не все равно. Какая проблема с кучей возникла у вас до того, как вы закомментировали какой-то код?

Кстати, использование классов, которые не являются POD (обычные старые данные) в глобальной области (статическая память), не рекомендуется. Есть ли у вас такая же проблема при перемещении объекта CascadeClassifier в локальную область (main ())?

1

Другие решения

попробуйте еще раз, как это:

#include "opencv2/objdetect/objdetect.hpp"
using namespace cv;

void testmem() {
CascadeClassifier c;
}

int main() {
for (int i=0; i<10; i++)
testmem();
return 0;
}
1

По вопросам рекламы [email protected]