Я пишу простое приложение ObjC2.0 / Cocoa и получаю сбой. Не знаком с Cocoa или ObjC, не могу понять, почему ..
Код, вызывающий проблемы: TableListCon.m
Когда я перетаскиваю папку в NSTableView, она вызывает addDirectoryToList
- который рекурсивно перебирает все файлы, содержащиеся в этом каталоге, вызывая addFileToList
для каждого.
Когда я перетаскиваю один файл в табличное представление, он вызывает addFileToList
напрямую. Это работает правильно, но в консоли отладчика показывает следующее сообщение:
tvnamergui(2612) malloc: *** error for object 0x144ab0: double free
*** set a breakpoint in malloc_error_break to debug
Или, если я перетаскиваю папку, таких сообщений нет, и она перетаскивается непосредственно в GDB со следующей обратной трассировкой:
(gdb) bt
#0 0x95cee688 in objc_msgSend ()
#1 0x921e2e4f in NSPopAutoreleasePool ()
#2 0x917b4b10 in NSCoreDragReceiveProc ()
#3 0x95f9e1b0 in DoDropMessage ()
#4 0x95f9dc11 in CoreDragMessageHandler ()
#5 0x960f0d21 in __CFMessagePortPerform ()
#6 0x961128e8 in CFRunLoopRunSpecific ()
#7 0x96112cd8 in CFRunLoopRunInMode ()
#8 0x924892c0 in RunCurrentEventLoopInMode ()
#9 0x92489012 in ReceiveNextEventCommon ()
#10 0x92488f4d in BlockUntilNextEventMatchingListInMode ()
#11 0x914e0d7d in _DPSNextEvent ()
#12 0x914e0630 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#13 0x914d966b in -[NSApplication run] ()
#14 0x914a68a4 in NSApplicationMain ()
#15 0x000022a0 in main (argc=1, argv=0xbffff74c) at /Users/dbr/Desktop/tvnamergui/main.m:13
Даже странно, если я сначала перетаскиваю один файл, я получаю ошибку double free
, но затем я могу без проблем сбрасывать папки (и все работает отлично)
Он всегда умирает при запуске [ArrayCon addObject:cfile];
(комментирование этой строки останавливает сбой, но, очевидно, нарушает функциональность!)
Редактировать : Благодаря сморгановскому ответу (с использованием NSZombieEnabled
) у меня появилось более полезное сообщение об ошибке:
*** -[CFArray release]: message sent to deallocated instance 0x155a70