OpenCV 2.4.9 SimpleBlobDetector Ошибка отладки Утверждение ..dbgdel.cpp строка: 52 _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse) - PullRequest
0 голосов
/ 12 декабря 2018

Ошибка похожа на Ошибка отладки!

Файл: f: \ dd \ vctools \ crt_bld \ self_x86 \ crt \ dbgdel.cpp

Строка 52

Выражение"_BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)

мой код выглядит так:

bool test()
{
Mat testImg = imread("test.bmp",0);
vector<KeyPoint> keypoints;
SimpleBlobDetector::Params &parameters = SimpleBlobDetector::Params();
parameters.maxArea = 100000;
parameters.maxThreshold = 1000;
Ptr<FeatureDetector> Detector  =  new SimpleBlobDetector(parameters);
Detector->detect(testImg,keypoints);
return true;
}

Я пытался удалить детектор, но не работал, ошибка возникает в последнем возвращаемом предложении имоя среда - Visual Studio 2015 32-битный режим отладки, и версия opencv - 2.4.9.

Кроме того, когда я отлаживаюсь в нем, появляется ошибка при освобождении объекта в core / operation.hpp

~Ptr(){ release();}

При удалении объекта в строке около 2616 отображается окно ошибки.

-------------- update -----------

Спасибо user10605163 и molbdnilo. Извините, что я не очень знаком с умным указателем, поэтому я удаляю его, просто чтобы убедиться, что нет ошибок типа утечек памяти.

Я изменяю свой код какследуйте:

Mat testImg = imread("testIMG.bmp",0);
vector<KeyPoint> keypoints;
SimpleBlobDetector::Params parameters;
parameters.maxArea = 100000;
parameters.maxThreshold = 1000;
SimpleBlobDetector Detector(parameters);
Detector.detect(testImg,keypoints);
return true;

Тем не менее, это не работает, но ошибка немного отличается:

Debug Assertion Failed!
File:minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line:892
Expression:is_block_type_valid(header->_block_use)

На этот раз ошибка спроисходит при деконструкции вектора.В include / vector вокруг строки 973:

~vector()
{
   _Tidy();
}
_Tidy()
{
 /* ... */
 this->_Getal().deallocate(this->_Myfitst(),this->Myend() - this->_Myfirst());
/*...*/

}
/*debugging into, at delete_scalar.cpp line 17 _free_dbg() */
void __CRTDECL operator delete(void* const block) noexcept
{
    #ifdef _DEBUG
    _free_dbg(block,_UNKNOWN_BLOCK);
    #else
    free(block);
    #endif
}

Странно, что ошибка возникает при деконструкции вектора, но если я прокомментирую Detector.detect(testImg,keypoint), не меняя других вещей о векторе, он работает нормально (ноничего не делает, хотя). И самое странное то, что когда я тестирую исходный код в проекте OpenCV, который строится из исходного кода (та же версия, VS 2015 32bit Debug тоже), он работал хорошо!

----------------- обновление --------------------

Наконец-то я собрал исходный код opencvи использовать файл lib в моем проекте, и он работал нормально. Прежде чем я использовал библиотеку, извлеченную из exe-файла.

...