我在ObjC ++包装器类(.mm)中使用以下代码,我注意到如果我通过引用捕获代码,则随机使用EXC_BAD_ACCESS失败。另一方面,如果我捕获对象(“std :: runtime_error错误”),它似乎没问题。
我是ObjC的新手,我知道ObjC中没有使用引用,但我希望编译器能够在这种情况下正常工作。我错过了什么吗?
catch(std::runtime_error &error) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:[NSString stringWithCString:error.what() encoding:[NSString defaultCStringEncoding]]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
});
答案 0 :(得分:0)
ObjC ++必须理解C ++引用。
问题是你的程序是异步读取另一个线程的内存。据我所知,该线程已经退出并且它的堆栈内存与它一起,或者当线程继续执行时堆栈内存被覆盖 - 因此,EXC_BAD_ACCESS
(作为一个可能解释)。