Ошибки malloc при передаче ссылок cv: Mat

0

Я использую структуры OpenCV 2 cv :: Mat для нескольких объектов в игре. Иногда они передаются напрямую, иногда с помощью указателя cv::Mat*, например, когда одному объекту требуется изменить другой объект cv :: Mat. Я привык к тому, что мне приходится управлять памятью, но я понимаю, что cv :: Mat использует подсчет ссылок. Кажется, что все работает большую часть времени, однако иногда я получаю следующую ошибку, выполняемую в режиме отладки в Xcode:

malloc: *** error for object 0x3000000000000000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

Это происходит, когда я передаю две cv :: Mats функции, как показано ниже:

Find(this->fillShape, shape->fillShape)

Эта ошибка не возникает при каждом запуске этой строки. Как мне отладить это?

Теги:
opencv
xcode

1 ответ

0

Из раздела 7.20.3.2 Свободная функция стандарта C99:

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by the calloc, malloc, or realloc function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.

Мое предложение отлаживать это было бы читать открытую документацию cv и гарантировать, что вы правильно распределяете память в каждой матрице. Internal to cv :: Mat - это "заголовок" и указатель на выделенную память, в которой хранятся фактические данные. "Заголовок" создается, когда вы объявляете матрицу, но отдельный вызов объекта, будь то его копия или распределение, требуется для выделения памяти, на которую указывает Мат. Вероятно, проблема связана с тем, что не выделяет внутреннюю память до того, как счетчик ссылок опустится ниже нуля и вызывается деструктор, но у меня нет тонны опыта с cv :: Mat desctructor. Вы должны посмотреть на первый пример кода здесь: http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню