initWithObjects上的NSMutableArray EXEC_BAD_ACCESS

问题描述:

在启用ARC的Objective-c中以下是否合法?initWithObjects上的NSMutableArray EXEC_BAD_ACCESS

NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil]; 

我认为应该是。但是,在这种情况下,它会在第四行给我EXEC_BAD_ACCESS:

NSMutableArray * bigArray = [[NSMutableArray alloc] init]; 
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
[bigArray addObject: smallArray]; 
smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil]; 

addObject将指针向右复制?所以如果我给smallArray分配一段新的内存来指出,那有什么问题呢?

但是这个代码段不会崩溃:

NSMutableArray * bigArray = [[NSMutableArray alloc] init]; 
NSMutableArray * smallArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
[bigArray addObject: smallArray]; 
smallArray = [[NSMutableArray alloc] init]; 
[smallArray addObject:@"4"]; 
[smallArray addObject:@"5"]; 

这是怎么回事?

+0

不是很清楚这件事,但我碰巧看到'initWithObjects:@“4”,“5”,nil]'...你有没有在''5'之前丢失'@' '? – Kjuly 2012-07-18 14:20:06

试试这个:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", "5", nil]; 

第二个对象必须是@ “5”,不只是“5”

+0

哦!好的赶上!谢谢。多么愚蠢的错误。 – huggie 2012-07-18 14:22:57

+0

大声笑必须等6分钟才能接受答案。 – huggie 2012-07-18 14:23:38

我想这是因为你忘记了字符串“5”中的@。它应该是:

smallArray = [[NSMutableArray alloc] initWithObjects:@"4", @"5", nil];