2016-02-03 186 views
1

转义范围后,我得到了损坏的堆错误消息。调试断言在debug_heap.cpp在_CrtlsValidHeapPointer(块)失败堆已损坏opencv

#include "opencv2\opencv.hpp" 
#include "opencv2\nonfree\features2d.hpp" 

using namespace cv; 

int main(int argc, char* argv[]) { 

    Mat img = imread(argv[1]); 

    SurfFeatureDetector detector(400); 

    vector<KeyPoint> keypoints; 

    detector.detect(img, keypoints); 

    return 0; 
} 

EDIT 固定。问题在于链接。我使用了visual studio 2015和opencv 2.49 x86 vc10。 vc10适用于visual studio 2010.在visual studio 2010中运行一些程序并且工作得很好。

+0

为什么不在这里提交新问题https://github.com/Itseez/opencv/issues?顺便说一句,你应该检查img.data为非空,因为imread可能会失败。 –

+0

执行错误检查,并使用调试器 – Drop

+0

@SergeiNikulov为什么这个新生会打扰高度专业的OpenCV程序员团队?他的代码中有99.99%的机会出现错误。 – Drop

回答

1

在转义范围后,我收到了错误的堆错误消息。

如果您确定错误发生在}的确切位置,那么在代码中这不是问题。它只是你没有正确链接OpenCV。 x64与x86之间不匹配或C++运行时库不匹配。所以只要确保一切都连接好。

+0

完全没有。这只意味着他的程序中存在未定义的行为,并且一切都可能发生。 – Drop

+0

我相信它发生在},因为我包围了不同范围内的内部代码{},并且在} –

+0

@Drop失败:我知道我的假设不是基于真实的线索。但99%的时间,有些人面对OpenCV这个错误,它是从不好的链接 –