Утечка памяти в SubstringToIndex - PullRequest
1 голос
/ 02 июля 2010

Я использую эту функцию для извлечения подстроки, она работает, но есть две утечки:

-(NSString*)EstraiP:(NSString*)str ini:(NSString*)ini fin:(NSString*)fin occ:(int)occ{

     NSRange rstr1;
     for(int i=0; i < occ; i++){
          rstr1=[str rangeOfString:fin];
          str=[str substringFromIndex:rstr1.location+rstr1.length];
     }

     NSString* FinalStr;
     rstr1=[str rangeOfString:ini];

     if(occ==0){
          if(rstr1.length==0)
               return @"Non Trovato inizio";
          FinalStr=[str substringFromIndex:(rstr1.location +  rstr1.length)] ;
     }else{
          if(rstr1.length==0)
               return @"Non Trovato inizio";
          FinalStr=[str substringFromIndex:rstr1.location+rstr1.length] ;
     }

     NSRange rstr2=[FinalStr rangeOfString:fin];
     if(rstr2.length==0)
          return @"Non Trovata fine";
     FinalStr=[FinalStr substringToIndex:rstr2.location];

     return FinalStr;
}

Это приводит к утечке памяти из строк:

str=[str substringFromIndex:rstr1.location+rstr1.length];

FinalStr=[FinalStr substringToIndex:rstr2.location];

Я посмотрел вокругно ничего не нашел .... Нет ассигнования или сохранения, поэтому я не должен выпускать их ... в чем может быть проблема?Я надеюсь, что я объяснил себе

Спасибо!

1 Ответ

0 голосов
/ 10 июля 2010

Ваш начальный цикл for может вызвать исключение.-[NSString rangeOfString:] возвращает объект NSRange с полем местоположения, установленным в NSNotFound, если совпадение не найдено.В этом случае вы в конечном итоге вызовете исключение при подключении этого значения к -substringFromIndex:.

. Вы не должны называть переменные заглавными буквами.Такое наименование обычно зарезервировано для имен классов и делает ваш код очень запутанным для чтения.

Вместо использования aRange.location + aRange.length вы можете захотеть использовать NSMaxRange(aRange).Он компилируется точно так же, но он немного более читабелен.

И, наконец, у вас нет утечек памяти.Почему вы думаете, что есть один?

...