c++ cli - IntPtr导致内存泄漏



这个函数是一个循环。当我运行程序时,IntPtr行给了我内存问题,我已经删除了[],但它仍然不能解决内存问题,有人能帮忙吗?由于

void showImage(IplImage *img,System::Windows::Forms::PictureBox^ picturebox)
{
IntPtr ip(new unsigned char[img->widthStep*img->height]); // this line causing memory usage to keep going up very fast
//memcpy(ip.ToPointer(),img->imageData,img->widthStep*img->height);
//picturebox->Image = gcnew Bitmap(img->width,img->height, img->widthStep, System:rawing::Imaging::PixelFormat::Format24bppRgb, ip);
delete[] ip;
} 
这是c++ CLI

这段代码可以编译,但这是设计的结果。应用于托管类型的删除操作符实际上并不释放任何内存。它在传递的对象上调用IDisposable::Dispose()方法。令人遗憾的是,这甚至可以工作,IntPtr被装箱以将其转换为对象,然后检查它是否实现了IDisposable接口。当然没有,什么也没发生。

必须传递从new操作符返回的指针。不要忘记在finally块中这样做,这样异常就不会导致泄漏。

顺便说一句,在你注释的代码中有更多的复杂性。您使用的位图构造函数要求您保持IntPtr有效,除非不再使用位图,否则无法释放内存。所以使用delete实际上是无效的。考虑使用Bitmap. lockbits()来获取一个指向Bitmap的指针,Bitmap可以管理自己的内存。注意步幅

最新更新