特定の UI アクションの後にプログラムがクラッシュする原因となる、メモリ破損エラー (と思われます) があります。これは Cocoa Objective-C アプリケーションであり、GC を使用しません。
何時間ものデバッグの後、クラッシュの考えられる理由を見つけました。
DiscSelectPopup *popupSelect = [[DiscSelectPopup alloc] initWithDataList:dataList count:count];
NSInteger result = [NSApp runModalForWindow:popupSelect.window];
上記のポップアップ ルーチンは、セカンダリ スレッドから実行されます。このスレッドは、ユーザーがボタンをクリックするたびに作成および開始されます。したがって、複数のモーダルポップアップを同時に表示できます。
と を使用してプログラムをデバッグ モードで実行するMallocStackLogging=1
とMallocStackLoggingNoCompact=1
、呼び出し時に malloc エラー ログ メッセージが出力されrunModalForWindow:
ます (常にではありません)。
malloc: *** error for object 0xbc65840: double free
.....
malloc: *** error for object 0xbc547e0: pointer being freed was not allocated
runModalForWindow:
セカンダリスレッドから使用するのは本当に悪いですか?
それがクラッシュの原因でしょうか?