2010-12-01 19 views
-1

次の目的のCコードにメモリリークの問題があります。 太字アスタリスク(***)行はメモリリークのある行です(計測器に記載されています)。それのアイデア?ありがとう。目的Cメモリリークの問題

- (UIImage*)part:(float)part ofImage:(UIImage*)imgObject withMask:(UIImage*)imgMask { 
UIImage *imgResult = nil; 
CGRect rcMask = CGRectMake(0.0f, 0.0f, imgMask.size.width, imgMask.size.height); 
CGRect rcObject = CGRectMake(0.5f * (rcMask.size.width - imgObject.size.width), 0.0f, imgObject.size.width, imgObject.size.height * part); 

BytePtr pictureData = (BytePtr)malloc(rcMask.size.width * rcMask.size.height * 4); 
CGContextRef pictureContext = CGBitmapContextCreate(pictureData, rcMask.size.width,    rcMask.size.height,8, rcMask.size.width * 4,CGImageGetColorSpace(imgObject.CGImage),    kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

CGContextClipToMask(pictureContext, rcMask, imgMask.CGImage); 
CGImageRef imgInRect; 
imgInRect = CGImageCreateWithImageInRect(imgObject.CGImage, rcObject); 
CGContextDrawImage(pictureContext, rcObject, imgInRect); 
CGImageRelease(imgInRect); 
***imgResult = [UIImage imageWithCGImage:CGBitmapContextCreateImage(pictureContext)];*** 

CGContextRelease(pictureContext); 
free(pictureData); 
return imgResult; 
} 
+2

あなたは適切にこのサイト上のテキストエディタでコードをフォーマットする必要があります。 – WrightsCS

+0

太字の線は何ですか? – JeremyP

+0

それを考え出した。 Jacobの編集で大胆さが消えた。 – JeremyP

答えて

5
imgResult = [UIImage imageWithCGImage:CGBitmapContextCreateImage(pictureContext)]; 

あなたは、CGImageを作成UIImageファクトリメソッドに渡し、それを忘れます。あなたはCGImageを漏らしています。

代わりにこれを行います。

CGImageRef cgResult = CGBitmapContextCreateImage(pictureContext); 
if (cgResult) { 
    imgResult = [UIImage imageWithCGImage: cgResult]; 
    CGImageRelease(cgResult); 
} 
関連する問題