OpenCV 2.4.9 SimpleBlobDetector调试声明失败..dbgdel.cpp行:52 _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

时间:2018-12-12 15:08:36

标签: c++ opencv visual-studio-2015

错误就像 调试断言失败!

文件: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;
}

我试图删除检测器,但没有成功,该错误在最后一次返回sendense时发生,我的环境是Visual Studio 2015 32位调试模式,而opencv版本是2.4.9。

此外,当我对其进行调试时,在core / operation.hpp中释放对象时会出现错误

~Ptr(){ release();}

在2616左右的行中删除obj时,会显示错误窗口。

--------------更新------------

感谢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)

这一次在解构向量时似乎出现了错误。 在第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文件提取的lib之前。

0 个答案:

没有答案