Objective C中的C ++数组给出了EXC_BAD_ACCESS

时间:2013-08-18 19:17:32

标签: c++ objective-c arrays xcode

我正在使用带有ARC的Xcode 4.6编程。

我正在处理一组简单的整数,当使用NSMutableArray时,它可以正常使用下面的代码。

NSMutableArray *_array; // variable
...
_array = [[NSMutableArray alloc] initWithCapacity:capacity]; // allocation 
... 
[_array addObject:[NSNumber numberWithInt:int_number]]; // inserting 
... 
return [[_array objectAtIndex:i] integerValue]; // retrieving

然而这并没有那么好,因为我在数组中进行了大量的查找,并且所有的拆箱和可能的NSMutableArray本身都有点慢。

在我的代码的其他部分,我已经将NSMutableArray替换为一个具有很大改进的简单c-array,但在这部分我使用的是可变长度数组,不能使用简单的c-array。所以我正在尝试使用C ++数组。在Xcode中我将文件从.m重命名为.mm(编译为Objective-C ++)并使用下面的代码编译得很好但是当它运行时会导致EXC_BAD_ACCESS错误,我找不到原因。我需要在这里做一些手动垃圾收集吗?

int *_array; // variable
...
_array = new int[capacity]; // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving

2 个答案:

答案 0 :(得分:4)

我认为假设您访问了数组之外的元素,即假设您i>= capacity,这是一个非常安全的猜测。是的,您最终必须手动delete[]使用new分配的数组。肯定从你发布的这个片段看起来它会泄漏,所以也许你想在上下文中提供更多的代码,比如定义变量的地方(本地或类或任何地方)以及如何访问数据等。

答案 1 :(得分:1)

您想要 C ++可变长度数组吗?然后vector就是您所追求的,而不是您尝试使用的 C数组

std::vector<int> _array; // variable
...
_array.reserve(capacity); // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving