2011-03-19 52 views
0

我正在处理一个NSNumbers数组,我有一种方法可以根据按钮来填充它们;Malloc错误:在OBJC中双倍空闲

- (NSMutableArray *)addNumberToArray:(int)numPressed andWithGuessArray:(NSMutableArray *)guessArray andWithActiveIndex:(int)activeIndex { 
NSNumber *numberPressed = [NSNumber numberWithInt:numPressed]; 
switch (numPressed) { 
    case 1: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 2: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 3: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 4: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 5: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 6: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 7: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 8: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    case 9: 
     [guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
     break; 

    default: 
     break; 
} 
[numberPressed release]; 

for (int i = 0; i < 4; i++) { 
    NSLog(@"%i",[[guessArray objectAtIndex:i]intValue]); 
} 
NSLog(@"----"); 

return guessArray; 

}

然后,我必须删除该阵列中的所有数字的方法。

- (void)deleteAll:(id)sender { 
NSLog(@"%@",guessArray); 
for (int i = 0; i < numbersInAns; i++) { 
    [guessArray replaceObjectAtIndex:i withObject:[NSNumber numberWithInt:0]]; 

} 

activeIndex = 0; 
for (int i = 0; i < 4; i++) { 
     NSLog(@"%i",[[guessArray objectAtIndex:i]intValue]); 
} 

}

的问题时,当我填充数组,清除它,再填写一次,并再次尝试清除它。

2011-03-19 13:58:43.492 BombDefusal [4711:207]( 2, 2, 3,)//这是什么其清零前右阵列中,这些都是NSNumbers

BombDefusal(4711,0xa096a540)的malloc:*错误对象0x4e0cc40:双免费 *设置malloc_error_break断点调试

(GDB)打印对象0x4e0cc40

解决

+0

这可能是一个愚蠢的问题,但为什么你使用开关而不是单个if语句? – jonmorgan 2011-03-19 18:16:00

+0

哈哈它曾经是一个必要的开关,但我改变了它,但我没有注意到它现在是额外的代码 – Raplesyrup1 2011-03-19 19:01:15

回答

2

你得到该错误消息说, “在malloc_error_break断点设置调试”。你尝试过吗?

你打电话releasenumberPressed对象,但你没有retain它。 NSNumber类方法numberWithInt:向您返回一个自动释放对象。那release呼叫是不必要的和不正确的。

除此之外,在switch语句中的每条目包含完全相同相同的代码 - 为什么你写的switch语句呢?你可以用一行代替整个块:

[guessArray replaceObjectAtIndex:activeIndex withObject:numberPressed]; 
+0

哦,哈哈是啊,它曾经有一些不同的代码,需要一个开关,但我做得更好,我没有注意到我不需要开关 – Raplesyrup1 2011-03-19 18:32:23