错误就像 调试断言失败!
文件: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;
}
我试图删除检测器,但没有成功,该错误在最后一次返回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之前。