Ошибка похожа на Ошибка отладки!
Файл: 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 ¶meters = 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-файла.