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