删除std::vector时出现异常<;无符号字符>;来自opencv imencode 我对OpenCV和C++有了新的体验,我不得不精简C++在我的Delphi应用程序上使用OpenCV。所以我从dll导出这个函数,在图像处理后将指向mat的指针转换回字节。这是im使用的函数: DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen) { cv::Mat &matCvrt = *src; std::vector<unsigned char> *poutVet = new std::vector<unsigned char>(); std::vector<unsigned char> &outVet = *poutVet; imencode(".png", matCvrt, outVet); outLen = outVet.size(); unsigned char* outBytes; outBytes = new unsigned char[outVet.size()]; std::copy(outVet.begin(), outVet.end(), outBytes); vector<unsigned char>().swap(outVet); return outBytes; } DllExport unsigned char*MatToBytes(cv::Mat*src,int&outLen) { cv::Mat和matCvrt=*src; std::vector*poutVet=new std::vector(); std::vector&outVet=*poutVet; imencode(“.png”、matCvrt、outVet); outLen=outVet.size(); 无符号字符*outBytes; outBytes=新的无符号字符[outVet.size()]; std::copy(outVet.begin()、outVet.end()、outBytes); 向量().swap(outVet); 返回outBytes; }

删除std::vector时出现异常<;无符号字符>;来自opencv imencode 我对OpenCV和C++有了新的体验,我不得不精简C++在我的Delphi应用程序上使用OpenCV。所以我从dll导出这个函数,在图像处理后将指向mat的指针转换回字节。这是im使用的函数: DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen) { cv::Mat &matCvrt = *src; std::vector<unsigned char> *poutVet = new std::vector<unsigned char>(); std::vector<unsigned char> &outVet = *poutVet; imencode(".png", matCvrt, outVet); outLen = outVet.size(); unsigned char* outBytes; outBytes = new unsigned char[outVet.size()]; std::copy(outVet.begin(), outVet.end(), outBytes); vector<unsigned char>().swap(outVet); return outBytes; } DllExport unsigned char*MatToBytes(cv::Mat*src,int&outLen) { cv::Mat和matCvrt=*src; std::vector*poutVet=new std::vector(); std::vector&outVet=*poutVet; imencode(“.png”、matCvrt、outVet); outLen=outVet.size(); 无符号字符*outBytes; outBytes=新的无符号字符[outVet.size()]; std::copy(outVet.begin()、outVet.end()、outBytes); 向量().swap(outVet); 返回outBytes; },opencv,Opencv,我已经研究了一整天了,但是找不到答案。如果我删除代码 vector<unsigned char>().swap(outVet); vector().swap(outVet); 它可以正常工作,但会泄漏内存。如果我把它放在代码中,我会得到“调试断言失败!”希望有人能帮助我,非常感谢。不要使用指向std::vector的指针。此类已管理内存分配和释放: DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen)

我已经研究了一整天了,但是找不到答案。如果我删除代码

vector<unsigned char>().swap(outVet);
vector().swap(outVet);

它可以正常工作,但会泄漏内存。如果我把它放在代码中,我会得到“调试断言失败!”希望有人能帮助我,非常感谢。

不要使用指向
std::vector
的指针。此类已管理内存分配和释放:

DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen)
{ 
    std::vector<unsigned char> outVet;
    imencode(".png", *src, outVet);
    outLen = outVet.size();
    unsigned char* outBytes;
    outBytes = new unsigned char[outVet.size()];
    std::copy(outVet.begin(), outVet.end(), outBytes);
    return outBytes;
}
DllExport unsigned char*MatToBytes(cv::Mat*src,int&outLen)
{ 
std::向量输出;
imencode(“.png”,*src,outVet);
outLen=outVet.size();
无符号字符*outBytes;
outBytes=新的无符号字符[outVet.size()];
std::copy(outVet.begin()、outVet.end()、outBytes);
返回outBytes;
}

我自己修复了它,我在VisualStudio2010上试用了它,它工作正常。我使用的是opencv的vc11库,所以现在我只需要在visual studio 2012上构建opencv。

这实际上是因为我使用的是visual studio 2012,并且使用的是opencv的vc11库。虽然我现在正在使用您的代码,但我自己不知道没有必要销毁std::vector,现在我可以看到内存泄漏不再存在了。谢谢