我对C ++比较陌生。我正在分配一个缓冲区:
uint8 *buffer = new uint8[len];
使用第三方库,我使用“img”对象的方法(它是一张图片)来“接管”缓冲区作为原始图像数据:
img->SetBuffer((uint8*)data);
我怀疑在实践中“接管”意味着“img”对象有自己的指针,在“SetBuffer”指向“buffer”中的数据之后。一切正常,但我的编译器抱怨(这是一个警告,而不是错误)关于内存泄漏。如果我在SetBuffer之后添加这一行:“删除缓冲区; ”,则警告消失,但同时我的“img”结束空白(无数据)。如何避免编译器警告并保留数据?有没有办法只删除“缓冲”指针本身,而不会破坏它指向的数据?稍后在代码中,我删除了“img”对象,我想无论如何都会删除所有图像数据。
答案 0 :(得分:2)
您应该阅读该课程的文档(或来源)(*img
的类型)。
SetBuffer
。如果类没有销毁缓冲区本身,则必须在销毁对象img
之后执行此操作。
-edit -
正如MSalters正确指出的那样,如果内存被类本身释放(例如,new[]
使用delete[]
,allocator::allocate()
使用allocator::deallocate()
,则应当使用适当的分配方案。 },malloc()
与free()
...)
[Rem:你的问题表明该课程没有像你使用它那样重新分配。]
答案 1 :(得分:0)
如果img
没有解除分配缓冲区,则必须释放img
。
delete img;
delete [] buffer;