c++ - 当我尝试释放指针 vector 时出现问题

标签 c++ vector

我正在尝试学习释放 vector 中的指针,我已经阅读了此页面上的问题,并按照答案编写了一些测试代码。我从网络摄像头抓取图像并首先将所有图像存储在内存中,抓取所有图像后,我将所有图像保存为 jpg 格式。

一开始一切正常,我可以将图像存储在内存中,然后我可以将它们全部保存为 jpg。但问题是,当我尝试释放 vector 中的所有元素时,它总是给我一些错误。它总是转到 dbgheap.c: IsValidHeapPointer。我对 Virtual C++ 和 C++ 很陌生,所以我不知道为什么会发生这个错误。

我使用 OpenCV 抓取图像和保存图像,但我确定问题不在于 OPENCV,而是删除 vector 。所以也许我错过了什么,所以任何人都可以给我一些提示吗? 非常感谢你提前。 代码有点像这样:

std::vector<IplImage*> images(30);
IplImage* TheImage;
for (int j=0;j<30;j++){
    TheImage=camera.QueryFrame();
    images[j]=(IplImage*)cvClone(TheImage);
    if(cvWaitKey(20)==27)  
        break;
}
cvDestroyWindow("camera");

CString ImagesName;

for(int i=0;i<30;i++){
    ImagesName.Format(_T("Image%.3d.jpg"), i);
    cvSaveImage(ImagesName,images[i]);
}


int s=images.size();
for(size_t i = 0; i <s ; ++i)
{
    delete  images[i];// Here should be cvReleaseImage(images[i]);
} 

/*
for(std::vector::iterator i=images.begin(),endI=images.end();i!=endI;++i) { 删除*我; } */

images.clear();

最佳答案

您遇到问题的原因是图像不是使用 new 创建的。作为 C 的 OpenCV 使用 malloc()。但在尝试调用 free() 之前,请使用为此提供的函数:cvReleaseImage()

旁注:仅仅因为名为 CreateSomething 的函数返回一个指针并不意味着您甚至可以删除/释放它指向的内存。看看下面的代码,它非常好,但你不能自己释放内存。这可能看起来很奇怪,但确实如此,但此类函数可能会使用某种保留内存映射或其他方式来处理它们的内存。

int someint;

int *CreateInt()
{
    return &someint;
}

关于c++ - 当我尝试释放指针 vector 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438437/

相关文章:

c++ - 使用 VTK 绘制多条线集

c++ - OpenCV Video Capture无法作为类成员(C++)

c++ - 与 STL vector 共享数组

c++ - 如何调整结构的二维 vector 的大小

c++ - 在 C++ 中保留引用对象的 vector

c++ - error LNK2001继承问题

c++ - SetThreadAffinityMask 无效

c++ - Generating 'Magic Square' Algorithm(算法来自一本书)

c++ - 为什么这个数据流在第 26 个字节结束?

C++:使用指向 vector 开头的指针访问 vector 元素