我试图在我的 objective-c 程序中使用 std::list 并遇到运行时问题。
我有(为简洁起见编辑)
#import <list>
...
@interface Foo {
std::list<Bar *> *myList;
}
...
@implementation Foo
-(void)loopList {
myList = new std::list<Bar *>;
for (std::list<Bar *>::iterator ii; ii != myList->end(); ++ii)
{
// Do nothing here
}
}
一切都编译得很好,但我在执行 for 循环时得到了一个 EXC_BAD_ACCESS。我没有对内容做任何事情,只是循环遍历它们(目前)。
我会使用 NSMultableArray,但我需要在迭代时快速插入和删除元素,这是不可能的。另外,我想使用 STL 来解决速度问题。
我将我的文件设置为 sourcecode.cpp.objcpp。
提前致谢。
最佳答案
这一行:
for (std::list<Bar *>::iterator ii; ii != myList->end(); ++ii)
需要成为:
for (std::list<Bar *>::iterator ii = myList->begin(); ii != myList->end(); ++ii)
在您的版本中,ii
从未被赋值,因此它没有任何可迭代的内容。根据您发布的代码,原因尚不清楚,但正因为如此,您稍后会尝试取消引用无效的内存地址,这就是您生成异常 (EXC_BAD_ACCESS) 的原因。
关于objective-c - 尝试在 objective-c 程序中使用 std::list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2262498/