3

我在 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];
    });
4

1 回答 1

0

ObjC++ 必须理解 C++ 引用。

问题是您的程序异步读取另一个线程的内存。据我所知,该线程已经退出并且它的堆栈内存连同它一起,或者堆栈内存在线程继续执行时被覆盖 - 因此,EXC_BAD_ACCESS(作为一种可能的解释)。

于 2012-10-08T09:49:54.297 回答