我目前正在研究计算机视觉,并尝试使用Hough-Transform来查找一些线条。操作本身正在工作,然而,即使是最小的样本代码也会产生释放错误。
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
int size[] = {100, 100};
Mat img(1, size, CV_8U);
img = cv::Scalar(255);
vector<Vec4i> lines;
HoughLinesP(img, lines, 1, CV_PI/180, 100, 30, 5);
cout << lines.size() << endl;
}请注意,如果我将行转换为*行,在堆上创建向量,并且不删除它,那么一切都是正常的。我看不出代码有任何问题,它直接取自OpenCV示例。
异常发生在
msvcr110d.dll!_CrtIsValidHeapPointer(const void * pUserData) Line 2036 C++我从VS2012 64位版本编译并运行此程序,可执行文件也是64位的。操作系统为Windows 7,64位
发布于 2014-01-19 00:29:25
这两个选项中的任何一个都可以解决此问题:
这是因为HoughLinesP在通过引用传递的“行”对象中分配内存,但在调用HoughLinesP的函数结束时,应用程序将取消分配内存。因此,对于不同的CRT,这就有问题了。
发布于 2013-03-08 07:15:37
您的应用程序可能正在发布模式下运行,请尝试在Debug模式下运行它。
(我之所以建议这样做,是因为它使用了调试DLL msvcr110d.dll)。
我遇到了this问题,你可能也会发现它很有用。
希望这对我有帮助,让我知道它的进展!
发布于 2015-07-10 22:29:34
vector<Vec4i> lines;
line.reserve(1000); //create enough place for linesDoodlo:
这是因为HoughLinesP在通过引用传递的“
”对象中分配内存,...
如果你预留了足够的行位置,那么就不会出现内存问题,因为函数不会只使用预留的位置来创建内存域。
https://stackoverflow.com/questions/15283551
复制相似问题