2011-04-11 46 views
2

我得到这个问题可以任何人帮我 这里是我的代码。此代码工作第一次点击,但是当点击2次就得到错误内存问题与阵列释放在objective-c

的malloc:错误对象0x4e226a4:用于释放对象不正确的校验 - 对象是在被释放后,可能被修改。 * *设置malloc_error_break断点去**错误

- (void)updateTextViewContents { 
    content = [[NSMutableString alloc] init]; 
    for (int i = 0; i <[ _scoresArray count]; i++) 
    { 
    NSMutableString *data = [_scoresArray objectAtIndex:i]; 
     [content appendString:data]; 
     if([content isEqualToString:UserText.text]&&[content isEqualToString:PassText.text]) 
     { 
     UIAlertView *alt = [[UIAlertView alloc] initWithTitle:nil message:@"Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alt show]; 
      [alt release]; 
      [content release]; 

     } 
     else  
     { 
     UIAlertView *alt1 = [[UIAlertView alloc] initWithTitle:nil message:@"NOT A Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alt1 show]; 
     [alt1 release]; 
     } 
    } 

当我松开了这里工作,但是当我输入正确的用户名和密码,点击第二次都改变视图显示在时间。我认为它会发生,因为数组获得添加在每一个cilck这就是为什么两个视图显示时间如何我这样解决。 // [内容发布];

}

回答

0

这里产生,因为,

内存问题你如果条件释放内容的NSMutableString,然后再追加吧。

所以,不要释放for循环,释放它for循环。

- (无效)updateTextViewContents {

content = [[NSMutableString alloc] init]; 

for (int i = 0; i <[ _scoresArray count]; i++) 
{ 

    NSMutableString *data = [_scoresArray objectAtIndex:i]; 
    [content appendString:data]; 
    if([content isEqualToString:UserText.text]&&[content isEqualToString:PassText.text]) 
    { 
     UIAlertView *alt = [[UIAlertView alloc] initWithTitle:nil message:@"Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alt show]; 
     [alt release]; 
     //[content release]; - Not release here. 

    } 
    else  
    { 
     UIAlertView *alt1 = [[UIAlertView alloc] initWithTitle:nil message:@"NOT A Valid User" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alt1 show]; 
     [alt1 release]; 
    } 
} 

[content release]; 
+0

它的工作,但犯规给我看别的警报视图当我输入错误的用户名和密码 – Harish 2011-04-11 07:40:05

+0

你好,请从内容变量,而不是释放它的字符串。要删除字符串,你可以使用[content deleteCharactersInRange:((NSRange)range)];方法。 – 2011-04-11 07:49:13

0

你能不能用这个

[content appendString:[_scoresArray objectAtIndex:i]]; 
0

你既警报显示,因为你的循环放break后更换

NSMutableString *data = [_scoresArray objectAtIndex:i]; 
     [content appendString:data]; 

是有效的用户,因为你肯定是没有经过循环后,它是有效的用户 希望这会有所帮助 好运

0

您在if条件中有版本内容。对于下一次迭代,您将再次尝试将数据附加到内容,如果在以前的迭代中条件为真,则已经释放内容。因此你得到那个错误object was probably modified after being freed