gpt4 book ai didi

.net - 内存泄漏C++/CLI方法

转载 作者:行者123 更新时间:2023-12-02 16:47:20 25 4
gpt4 key购买 nike

似乎此方法在调用时正在造成内存泄漏。如果我不打电话,那就没有内存泄漏。
知道是什么原因造成的吗?

该函数是C#应用程序正在调用的c++ / cli dll的一部分。

List<array<Byte>^>^ writejpeg( cv::Mat ovrImagePrevious, List<array<Byte>^>^ overviewOneImages, Dictionary<String^,List<array< Byte >^>^>^ violationAssets, String ^ value, int fileCorruptFlag ) 
{
vector<uchar> buf1;//buffer for coding
vector<int> param = vector<int>(2);
param[0]=CV_IMWRITE_JPEG_QUALITY;
param[1]=100;//default(95) 0-100
int img_sz1=ovrImagePrevious.cols*ovrImagePrevious.rows;
array <Byte>^ hh1 = gcnew array<Byte> (img_sz1);

if (fileCorruptFlag==1)
{img_sz1=1;
hh1=nullptr;}
else
{

cv::imencode(".jpeg", ovrImagePrevious, buf1, param);
for(int i=0; i < buf1.size(); i++)
{
hh1[i] = buf1[i];
}

}

if(!violationAssets->TryGetValue(value, overviewOneImages))
{
overviewOneImages = gcnew List<array<Byte>^>();
violationAssets->Add(value, overviewOneImages);
}

overviewOneImages->Add(hh1);

return overviewOneImages;


}

UPDATE#1:

当我删除此行时:
overviewOneImages->Add(hh1);

泄漏消失了。

我需要以不同的方式做这行。有任何想法吗?

UPDATE#2:

事实证明,在该部分代码中调用该函数时会发生泄漏
    if(!violationAssets->TryGetValue("OVERVIEW_ONE", overviewOneImages))
{
cv::Mat f1;
captureOverview>>ovrImageCurrent;

if (fileCorruptFlag==0)
f1= ovrImageCurrent;

if (windowOn && !fileCorruptFlag)
{
cv::namedWindow( "Frame1", 1 );
cv::imshow( "Frame1", f1 );
cv::waitKey(1);
}

overviewOneImages = writejpeg(f1, overviewOneImages, violationAssets,"OVERVIEW_ONE",fileCorruptFlag);


}

看起来像是由于线
       f1= ovrImageCurrent;

更改为
       ovrImageCurrent.copyTo(f1) 

修复它。

知道为什么第一个不正确并且无法处理吗?还有没有更好的方法来解决它?

最佳答案

大大简化了,您的代码如下所示:

hh1 = allocate a bunch of memory
add hh1 to overviewOneImages
return overviewOneImages

每次调用该函数时,假设 hh1未设置为 null,您将消耗更多的内存。毕竟,您的 overviewOneImages列表维护着对已分配内存的引用,因此垃圾收集器无法释放它。

此外,有些代码会在某些情况下分配一个新列表,并将该列表添加到 violationAssets字典中。再次,字典维护对分配的内存的引用,因此垃圾收集器无法释放它。

使用完毕后,您需要从列表(或字典)中删除内容。

关于.net - 内存泄漏C++/CLI方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com