我使用下面的代码:
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
答案 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的答案。