Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内存溢出问题OpenCV_C#_Opencv_Visual C++ - Fatal编程技术网

C# 内存溢出问题OpenCV

C# 内存溢出问题OpenCV,c#,opencv,visual-c++,C#,Opencv,Visual C++,我用VC++编写了一个水滴跟踪算法。我在一个控制台程序中运行了它,它的表现非常出色 现在,我想用c#编写应用程序的其余部分,所以我制作了一个VC++代码的dll。我从C代码调用这个dll 现在,在C#中,在运行大约2分钟后,应用程序抛出一个错误 Insufficient memory (Out of memory) in function cvAlloc, .\cxalloc.cpp(111) 我在代码中没有位置,使用cvAlloc分配内存,所以我只是想知道是什么导致它抛出这个错误。此外,当我

我用VC++编写了一个水滴跟踪算法。我在一个控制台程序中运行了它,它的表现非常出色

现在,我想用c#编写应用程序的其余部分,所以我制作了一个VC++代码的dll。我从C代码调用这个dll

现在,在C#中,在运行大约2分钟后,应用程序抛出一个错误

Insufficient memory (Out of memory)
in function cvAlloc, .\cxalloc.cpp(111)
我在代码中没有位置,使用cvAlloc分配内存,所以我只是想知道是什么导致它抛出这个错误。此外,当我在控制台中运行相同的代码时,它会运行数小时,而不会生成dll

有谁能帮我找出原因吗

多谢各位

代码:

这就是我正在做的一切。当我在一个独立的控制台应用程序中运行代码时,这个逻辑可以正常工作,但当我将代码包装在dll中并从c#调用它时,它就失败了

除此之外,我还有一个结构

struct resultData
 {
     int X, Y, status;
     char* error;
 };

但我想知道它是否会抛出OpenCV异常(如果有)。

内存泄漏怎么办?看起来你并没有释放所有的资源,比如指向图像和斑点的指针。这应该是你最关心的。cvAlloc()是OpenCV用于内存分配的内部函数。

内存泄漏怎么办?看起来你并没有释放所有的资源,比如指向图像和斑点的指针。这应该是你最关心的。cvAlloc()是OpenCV用于内存分配的内部函数。

如果您发布cvAlloc的代码会更好。然后它也会给出此错误:“函数cvGetMat中的Null指针(传递了Null数组指针)。\cxarray.cpp(2781)”在cvGetMat上,您确实传递了一个已删除的对象,这就是为什么它会抱怨为null。对于包装器,您确定您加载了DLL一次,它能够释放所有内存以防卸载吗?或者,在C语言的控制台程序中,有一部分您正在释放内存,但您忘记将其添加到DLL中。最坏的情况是,OpenCV函数本身可能存在问题。我做了个噩梦,解决办法是从OpenCV主干加载他们的最新代码。发布一些代码,这会有所帮助。如果您发布cvAlloc的代码会更好。然后它也会给出以下错误:“在函数cvGetMat中传递空指针(传递空数组指针),。\cxarray.cpp(2781)”在cvGetMat上,您肯定传递了一个已删除的对象,这就是为什么它会抱怨空指针,对于包装器,你确定你加载了DLL一次,它能释放所有内存以防卸载吗?或者,在C语言的控制台程序中,有一部分您正在释放内存,但您忘记将其添加到DLL中。最坏的情况是,OpenCV函数本身可能存在问题。我做了个噩梦,解决办法是从OpenCV主干加载他们的最新代码。发布一些代码,这会有所帮助。+1,在运行应用程序时,请在任务管理器中查看内存消耗情况。如果您多次使用此dll,您应该对thres\u img和blobs\u img执行cvReleaseImage(&gray\u img)。谢谢dnul,这很有帮助。你能移动这个评论来回答吗?实际上我想问一个问题。我已经在vc++中自如地使用了openCV。现在,如果我想像上面描述的那样使用DLL将openCV与C#.NET结合使用,会不会因为中间有一层厚厚的.NET而导致性能下降?基本上我想跟踪物体的运动,并用它来控制鼠标。因此,性能在这里非常重要,因为滞后会使应用程序变得无用。+1,请参阅运行应用程序时任务管理器中的内存消耗,如果您多次使用此dll,您应该对thres\u img和blob\u img执行cvReleaseImage(&gray\u img)。谢谢dnul,这很有帮助。你能移动这个评论来回答吗?实际上我想问一个问题。我已经在vc++中自如地使用了openCV。现在,如果我想像上面描述的那样使用DLL将openCV与C#.NET结合使用,会不会因为中间有一层厚厚的.NET而导致性能下降?基本上我想跟踪物体的运动,并用它来控制鼠标。因此,性能在这里非常重要,因为滞后会使应用程序变得无用。
struct resultData
 {
     int X, Y, status;
     char* error;
 };