HoughLinesP和openv内存管理
HoughLinesP and opencv memory management
我目前正在研究计算机视觉,并尝试使用霍夫变换来找到一些线条。操作本身是工作的,但是即使是最小的示例代码也会产生释放错误。
#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++
我从VS 2012 64位版本编译和运行这个,可执行文件也是64位的。操作系统为Windows 7, 64位
这个问题可以通过以下两个选项之一来解决:
-
将您的应用程序链接到与OpenCV库相同的CRT版本,
-
重新编译OpenCV并禁用静态CRT链接。
这是因为HoughLinesP在通过引用传递的"lines"对象中分配内存,但是在调用HoughLinesP的函数结束时,应用程序将取消分配内存。对于不同的CRT,这就有问题了
您的应用程序可能在发布模式下运行,请尝试在调试模式下运行。
(我建议这样做,因为它使用的是调试DLL, msvcr110 . DLL)。
我偶然发现了这个问题,你可能也会觉得有用。
希望有帮助,让我知道它是如何进行的!
vector<Vec4i> lines;
line.reserve(1000); //create enough place for lines
Doodlo:
这是因为HoughLinesP在通过引用传递的"lines"对象中分配内存,…
如果你预留了足够的行位置,那么就不会有内存问题,因为函数不会只使用预留的位置创建内存字段。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存