目标C中的C++数组给出EXC_BAD_ACCESS
C++ array in Objective C gives EXC_BAD_ACCESS
我正在使用带有ARC的iOS版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本身都有点慢。
在我的代码的其他部分中,我用一个简单的c数组替换了NSMutableArray,并进行了很大的改进,但在这一部分,我使用的是可变长度数组,不能使用简单的c阵列。所以我正在尝试使用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
我认为假设您访问了数组之外的元素是非常安全的猜测,即您的i
是>= capacity
。是的,您最终将不得不手动delete[]
使用new
分配的阵列。从你发布的这个片段来看,它看起来肯定会泄漏,所以也许你想在上下文中提供更多的代码,比如变量在哪里定义(本地或类中或任何地方),以及如何访问数据,等等。
您想要C++可变长度数组吗?那么vector
就是您想要的,而不是您试图使用的C数组。
std::vector<int> _array; // variable
...
_array.reserve(capacity); // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"
- OpenCV SVM 在火车上抛出异常,"Bad argument (There is only a single class)"
- 成员函数 bad() 的 std::ftsream 用于检查
- 使用 boost::asio 和 boost::thread 时"Bad file descriptor"
- OpenCV C++神经网络 predict() 函数抛出"Bad argument"错误