2010-07-22 64 views
1

我試圖替換NSMutableArray中的對象。在我班的其他地方,我成功地做到了。下面是代碼失敗的一個例子。當在NSMutableArray上調用replaceObject時EXC_BAD_ACCESS

NSNumber* newObject = [NSNumber numberWithDoulble:myCalculation]; 
NSLog(@"Old object at 12:%@",[myMisbehavingArray objectAtIndex:12]; 
[myMisbehavingArray replaceObjectAtIndex:12 withObject:newObject]; 

我在的NSLog聲明扔確保myMisbehavingArray指着東西,它是,但是當我運行程序我在replaceObjectAtIndex方法的角度得到一個EXC_BAD_ACCESS。

任何想法?

+0

那麼,什麼是你用它之前在做什麼?另外,它是一個本地變量還是伊娃?它是如何初始化的,等等。 – 2010-07-22 19:42:17

回答

0

我寫這些博客文章,以幫助人們調試EXC_BAD_ACCESS

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

http://loufranco.com/blog/files/debug-iphone-crash-EXC_BAD_ACCESS.html

當你做一些無關痛癢的結果在EXC_BAD_ACCESS,它很可能是您之前損壞堆。 myMisbehavingArray可能指向一個數組,但還有許多其他指針參與其中。

如果你能夠以一種非常簡單的方式可靠地重現問題,這行代碼就像一個堆腐敗檢測器。你可以移動它,看看它崩潰的地方,以及它不會試圖縮小事情變壞的地方。

更硬,更可靠的方法,是使民警衛隊的malloc,然後使用調試器來打開額外的檢查:

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

相關問題