ошибка распределения NSString? - PullRequest
0 голосов
/ 09 октября 2011

я использовал код ниже:

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 ]

1 голос
/ 09 октября 2011

попробуйте

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

и удалите

theString = [theString stringByAppendingFormat:@"%i.jpg",i];
1 голос
/ 09 октября 2011

В первой строке цикла вы объявляете указатель theString и выделяете объект:

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

Во второй строке вы перенаправляете указатель theString на новую выделенную автоматически выпущенную строку [theString stringByAppendingFormat:@"%i.jpg",i];, поэтому ранее выделенный объект теряется. Это утечка памяти.

Наконец, вы освобождаете автоматически выпущенную строку [theString release];, которая освобождает объект и завершает работу приложения, когда цикл автоматического освобождения попытается снова освободить объект.

Приверженность: прочитайте ответ Эдско .

1 голос
/ 09 октября 2011

stringByAppendingFormat возвращает новую строку с автоматическим выпуском. Таким образом, это означает, что вы освобождаете автоматически выпущенный объект, поэтому вы получаете сообщение об ошибке и пропускаете строку, выделенную в первой строке. Я бы предложил изменить эту первую строку на

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

и затем полностью удалите релиз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...