objective-c中数组释放的内存问题



我遇到了这个问题,有人能帮助我吗这是我的代码。这段代码可以在第一次点击时工作,但是当点击第二次时,它会得到错误

malloc: error for object 0x4e226a4:不正确的checksum for freed object - object可能在被释放后被修改。**在malloc_error_break中设置断点来消除**bug

- (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];
        }
    }

当我在这里释放它工作,但当我第二次点击输入正确的用户名和密码时,同时改变视图显示,我认为这将会发生,因为数组在每次点击时得到添加这就是为什么同时改变视图显示,我是如何解决的//(内容发布);

}

这里产生内存问题是因为,

释放content NSMutableString在if条件下,然后再次追加。

所以,不要在for循环中释放,要在for循环中释放。

updateTextViewContents

- (void){

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];

你不能把

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

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

你的两个警报显示,因为你的循环把break后,它是有效的用户,因为你不能通过循环后,它是有效的用户希望这能有所帮助祝你好运

在if条件中有释放内容。对于下一个迭代,您将再次尝试将数据附加到内容中,如果在前一个迭代中条件为真,则内容已被释放。这样就得到了错误 object was probably modified after being freed

最新更新