2011-10-09 72 views
0

我用下面的代码:分配错误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 

回答

1

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

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

然后完全删除发行版。

1

尝试

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

和除去

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

在声明循环中的指针theString内侧的第一串和分配一个对象:

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

在第二行你将指针theString重定向到新分配的autore租用字符串[theString stringByAppendingFormat:@"%i.jpg",i];,因此以前分配的对象丢失。这是内存泄漏。

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

Solient:请阅读edsko的答案。