我从CGImageRef获取数据,然后设置我创建的指向此数据的结构:
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
const UInt8 * imageData = CFDataGetBytePtr(data);
myPix->data = (l_uint32 *) imageData;然而,当我进行产品->分析时,我得到了一个内存泄漏警告。
我想原因是因为我不做CFRelease(数据)。但是,如果我这样做了,myPix ->数据就会被修改。我怎样才能摆脱内存泄漏警告,但又能让它正常工作?
发布于 2012-08-17 01:58:22
您只是在那里分配了一个指针-丢弃const (如果写入它,则为未定义的行为),并处理所有者(释放分配给data的分配-当您读取或写入该内存区域时,也是未定义的行为)。
如果需要数据可变副本,则必须创建自己的可变副本。您可以安全地调用CFRelease(data)。
有两种直接创建可变副本的方法:
1)使用malloc
使用malloc
malloc
myPix->data
myPix->data引用后,请调用free(myPix->data);2)创建CFData的可变副本。
CFMutableDataRef mutableData = CFDataCreateMutableCopy(0, 0, data);
myPix->data = (l_uint32 *)CFDataGetMutableBytePtr(mutableData);完成分配myPix->data引用后,调用CFRelease(mutableData);
https://stackoverflow.com/questions/11992791
复制相似问题