Reputation: 1622
I am using Xcode 4.6 programming for iOS with ARC.
I am working with an array of simple integers and when using NSMutableArray it all works fine with the code below.
NSMutableArray *_array; // variable
...
_array = [[NSMutableArray alloc] initWithCapacity:capacity]; // allocation
...
[_array addObject:[NSNumber numberWithInt:int_number]]; // inserting
...
return [[_array objectAtIndex:i] integerValue]; // retrieving
This however does not perform that well as I am doing a lot of lookups in the array and all the unboxing and possible NSMutableArray itself is a bit slow.
In other parts of my code I have replaced the NSMutableArray with a simple c-array with great improvements, but in this part I am working with variable length arrays and cannot use a simple c-array. So I am trying with C++ arrays. In Xcode i rename the file from .m to .mm (to compile as Objective-C++) and use the code below which compiles fine but when it runs it causes EXC_BAD_ACCESS errors and I cannot find the reason. Do I need to do some manual garbage collection here?
int *_array; // variable
...
_array = new int[capacity]; // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving
Upvotes: 3
Views: 1223
Reputation: 122391
You want C++ variable-length arrays? Then vector
is what you are after, not the C arrays you are attempting to use.
std::vector<int> _array; // variable
...
_array.reserve(capacity); // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving
Upvotes: 1
Reputation: 21184
I'd say its a very safe guess to assume you accessed an element outside of the array, i.e. your i
was >= capacity
. And yes, you will have to eventually manually delete[]
the array you allocated using new
. Definitely from this snippet you posted it looks like it will leak, so maybe you want to provide the code more in context, like where variables are defined (locally or in a class or wherever) and how data is accessed, etc.
Upvotes: 4