【发布时间】:2015-01-13 08:10:26
【问题描述】:
我对 C++ 比较陌生。我正在分配一个缓冲区:
uint8 *buffer = new uint8[len];
使用第 3 方库,我使用“img”对象(它是一张图片)的方法来“接管”缓冲区作为原始图像数据:
img->SetBuffer((uint8*)data);
我怀疑实际上“接管”意味着“img”对象有自己的指针,在“SetBuffer”之后指向“缓冲区”中的数据。一切正常,但我的编译器抱怨内存泄漏(这是一个警告,而不是错误)。如果我在 SetBuffer 之后添加这一行:“delete buffer;”,警告就会消失,但同时我的“img”会变成空白(没有数据)。如何避免编译器警告并保留数据?有没有办法只删除“缓冲区”指针本身,而不破坏它指向的数据?稍后在代码中,我删除了“img”对象,我猜它会清除所有图像数据。
【问题讨论】:
-
如果有的话,你应该
delete[] buffer。 -
你可能没有删除图像的内存。我想它们都指向同一个地方,所以只应该删除一个。检查是否删除了通过其中一个指针分配的内存。仅在该内存块中使用结束时。顺便说一句,״delete[] x".
-
编译器的确切信息是什么?
-
“有没有办法只删除 'buffer' 指针本身,而不破坏它指向的数据?” 这没有意义。
标签: c++ pointers buffer delete-operator