分配错误NSString?

时间:2011-10-09 09:57:34

标签: iphone objective-c ios arrays nsstring

我使用下面的代码:

for (int i=1; i<=3;i++){
    NSString *theString = [[NSString alloc] initWithFormat:@"%i",imageValue];
   theString = [theString stringByAppendingFormat:@"%i.jpg",i];
    [img addObject:theString];
    NSLog(@"the string %@:",theString); //01.jpg ,02.jpg and 03.jpg
    [theString release];
}

但我有3次这个错误原因?

错误:

myapp(15467,0xacdaa2c0) malloc: *** error for object 0x4eb1ca0: pointer being freed was not allocated

3 个答案:

答案 0 :(得分:1)

stringByAppendingFormat返回一个新字符串,并自动释放。这意味着你要释放一个自动释放的对象,这就是你得到错误的原因,并且你正在泄漏第一行分配的字符串。我建议将第一行改为

NSString* theString = [NSString stringWithFormat:@"%i", imageValue];

然后完全删除该版本。

答案 1 :(得分:1)

尝试

NSString *theString = [[NSString alloc] initWithFormat:@"%i%i.jpg",imageValue,i];

并删除

theString = [theString stringByAppendingFormat:@"%i.jpg",i];

答案 2 :(得分:1)

在循环内的第一个字符串中,您声明指针theString并分配一个对象:

NSString *theString = [[NSString alloc] initWithFormat:@"%i",imageValue];

在第二行中,您将指针theString重定向到新分配的自动释放字符串[theString stringByAppendingFormat:@"%i.jpg",i];,因此先前分配的对象将丢失。这是内存泄漏。

最后,释放自动释放的sting [theString release];,当自动释放循环尝试再次释放对象时,它会解除分配对象并使应用程序崩溃。

Solotion:阅读 edsko的答案。