我有一个内存损坏错误(我怀疑),这导致特定 UI 操作后程序崩溃。这是一个 Cocoa Objective-C 应用程序,不使用 GC。
经过几个小时的调试,我找到了崩溃的可能原因:
DiscSelectPopup *popupSelect = [[DiscSelectPopup alloc] initWithDataList:dataList count:count];
NSInteger result = [NSApp runModalForWindow:popupSelect.window];
上述弹出例程是从辅助线程执行的。每次用户单击按钮时都会创建并启动该线程。因此,我们可以同时显示多个模态弹出窗口。
MallocStackLogging=1
当我使用and在调试模式下运行程序时MallocStackLoggingNoCompact=1
,它会在调用时打印一条 malloc 错误日志消息runModalForWindow:
(但并非总是如此)。
malloc: *** error for object 0xbc65840: double free
.....
malloc: *** error for object 0xbc547e0: pointer being freed was not allocated
runModalForWindow:
从辅助线程使用真的很糟糕吗?
这可能是坠机的原因吗?