获得EXC_BAD_ACCESS试图ADDOBJECT到NSMutableArray的

问题描述:

时,我有以下代码:获得EXC_BAD_ACCESS试图ADDOBJECT到NSMutableArray的

NSInteger phoneCount = ABMultiValueGetCount(phones); 
NSMutableArray *phoneKeys = [[[NSMutableArray alloc] init] autorelease]; 
NSMutableArray *phoneKeyValues = [[[NSMutableArray alloc] init] autorelease]; 

for(CFIndex i=0; i < phoneCount; i++) { 
    //NSString *label = [(NSString *)ABMultiValueCopyLabelAtIndex(phones, i) autorelease]; 
    NSString *phone = [(NSString *)ABMultiValueCopyValueAtIndex(phones, i) autorelease]; 
    NSString *phoneIndex = [[[NSNumber alloc] initWithInt:ABMultiValueGetIdentifierAtIndex (phones, i)] autorelease]; 
    [phoneKeys addObject:phoneIndex]; // it breaks on this line 
} 

NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]); 

任何想法,为什么我会得到EXC_BAD_ACCESS,当我尝试做[phoneKeys ADDOBJECT:phoneIndex]?

在此先感谢

+0

您是否尝试过删除NSLog行? – kennytm 2010-08-29 18:13:36

+0

嗯你是对的。这是否意味着phoneKeys正在发布太快? – john 2010-08-29 18:16:54

+0

你的意思是它在删除NSLog后工作? – kennytm 2010-08-29 18:20:34

NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]); 

-count方法返回一个NSUInteger,它只是一个unsigned int。但是%@只能打印Objective-C对象,而不是unsigned int。这导致异常。

要打印unsigned int,您需要使用%u而不是%@

NSLog(@"Count: %u %u", [phoneKeys count], [phoneKeyValues count]); 
+0

谢谢!这帮助很大 – john 2010-08-29 18:31:22

每当这个发生在我身上,即它打破了正确的内存管理代码,并根据内存管理准则,但剧照崩溃,其结果是由于过度释放somwehere其他,我会做的代码进行全面审查寻找泄漏,我推荐你使用泄漏工具:

在X-代码去运行>与性能工具运行“泄漏

入住此技术问答&一太:http://developer.apple.com/mac/library/qa/qa2004/qa1367.html