"删除"指针不破坏数据

时间:2015-01-13 08:10:26

标签: c++ pointers buffer delete-operator

我对C ++比较陌生。我正在分配一个缓冲区:

uint8 *buffer = new uint8[len];

使用第三方库,我使用“img”对象的方法(它是一张图片)来“接管”缓冲区作为原始图像数据:

img->SetBuffer((uint8*)data);

我怀疑在实践中“接管”意味着“img”对象有自己的指针,在“SetBuffer”指向“buffer”中的数据之后。一切正常,但我的编译器抱怨(这是一个警告,而不是错误)关于内存泄漏。如果我在SetBuffer之后添加这一行:“删除缓冲区; ”,则警告消失,但同时我的“img”结束空白(无数据)。如何避免编译器警告并保留数据?有没有办法只删除“缓冲”指针本身,而不会破坏它指向的数据?稍后在代码中,我删除了“img”对象,我想无论如何都会删除所有图像数据。

2 个答案:

答案 0 :(得分:2)

您应该阅读该课程的文档(或来源)(*img的类型)。

  1. 检查您对SetBuffer
  2. 的假设是否正确
  3. 检查类是否在销毁时释放缓冲区。
  4. 如果类没有销毁缓冲区本身,则必须在销毁对象img之后执行此操作。

    -edit -

    正如MSalters正确指出的那样,如果内存被类本身释放(例如,new[]使用delete[]allocator::allocate()使用allocator::deallocate(),则应当使用适当的分配方案。 },malloc()free() ...)

    [Rem:你的问题表明该课程没有像你使用它那样重新分配。]

答案 1 :(得分:0)

如果img没有解除分配缓冲区,则必须释放img

delete img;
delete [] buffer;