J'écris une simple application ObjC2.0/cacao, et je reçois un accident .. Ne connaissant pas de cacao ou ObjC, je ne peux pas comprendre pourquoi. .accident lié à la mémoire avec l'ajout d'objets à NSArrayController
le code origine des problèmes est TableListCon.m
Lorsque je fais glisser un dossier sur le NSTableView, il appelle addDirectoryToList
- qui fait une boucle récursive sur tous les fichiers contenus dans ce répertoire, appelant addFileToList
sur chacun.
Lorsque je fais glisser un fichier sur le tableview, il appelle directement addFileToList
. Cela fonctionne correctement, mais dans la console Debugger il affiche le message suivant:
tvnamergui(2612) malloc: *** error for object 0x144ab0: double free
*** set a breakpoint in malloc_error_break to debug
Ou, si je fais glisser-déposer un dossier il n'y a pas de tels messages, et il tombe directement à GDB, avec le backtrace suivant:
(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
Plus étrange encore, si je fais glisser un seul fichier d'abord, je reçois l'erreur double free
, mais je peux déposer des dossiers sur les sans accidents (et tous fonctionne parfaitement)
Il meurt toujours quand [ArrayCon addObject:cfile];
est exécuté (En commentant cette ligne arrête le crash, mais casse évidemment la fonctionnalité)
Modifier: Merci à smorgan's answer (à l'aide NSZombieEnabled
), j'ai un message d'erreur plus utile:
*** -[CFArray release]: message sent to deallocated instance 0x155a70
Le lien vers TableListCon.m est rompu. –
C'était étrange, il semblait que stackoverflow avait encodé en url le trait de soulignement (dans le nom du projet), semble fonctionner après une modification, merci de le signaler – dbr
Lien encore cassé. – EightyEight