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( 1つの可能な説明として)。

于 2012-10-08T09:49:54.297 に答える