UIImageWriteToSavedPhotosAlbum与malloc_error

时间:2010-03-08 21:49:09

标签: iphone malloc wallpaper

我有一个带按钮的NIB文件。单击此按钮时,将调用setWallpaper:选择器。一切都按预期工作(图像被保存),除了malloc抛出的错误。

malloc: *** error for object 0x184d000: pointer being freed was not allocated ***
set a breakpoint in malloc_error_break to debug

我在malloc_error_break设置了一个断点,但我对调试器没有任何理解。我甚至找不到对象0x184d000。有谁知道为什么会这样?在将其发送到UIImageWriteToSavedPhotosAlbum之前,我还试图保留UIImage,但没有成功。

我的代码如下:

- (IBAction)setWallpaper:(id)sender {
    UIImage *image = [UIImage imageNamed:@"wallpaper_01.png"];
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    UIAlertView *alertView = [[UIAlertView alloc] 
          initWithTitle:NSLocalizedString(@"Galo!!!",@"Saved image message: title")
                message:NSLocalizedString(@"Now, check your \"saved photos\" group at \"photos\" app in your iPhone and select the actions menu > set as wallpaper.",@"Saved image message")
               delegate:nil
      cancelButtonTitle:NSLocalizedString(@"OK",@"OK Button")
      otherButtonTitles:nil];
   [alertView show];
   [alertView release];
}

2 个答案:

答案 0 :(得分:2)

好的,在克隆了我的整个项目之后,我意识到问题来自OS3.0。改为OS3.1,一切正常。谢谢你的帮助,卡尔!

答案 1 :(得分:0)

UIImageWriteToSavedPhotosAlbum以异步方式进行保存,这意味着您必须确保UIImage在整个时间内保持不变。你传递的是一个自动释放的对象,所以它在某个时候崩溃试图进行保存。更改setWallpaper:以将retain发送到UIImage。然后,您可以在回调中releaseautorelease以避免泄露。一个例子:

更改获取图像的行:

UIImage *image = [[UIImage imageNamed:@"wallpaper_01.png"] retain];

然后添加

[image release];
回调中的