Kakao Entwicklung: malloc: free_garbage: garbage PTR = 0x18a15e0 hat nicht Null refcount = 1 Fehler
-
03-07-2019 - |
Frage
Ich bin eine Cocoa-Anwendung zu entwickeln, und jeder so oft, wenn mein app in Xcode laufe ich die folgenden Arten von Nachrichten in der Debug-Konsole erhalten:
<
My app name>
(952,0xb0103000) malloc: free_garbage: garbage PTR = 0x107b2f0 hat nicht Null refcount = 1
drehte ich mich auf MallocStackLogging und NSZombieEnabled und haben diese Adressen eine malloc_history auf ein paar und bekam Spuren entlang der Linien, die unten angegeben.
Der rote Faden scheint Verweise auf NSPopupButtonCell in allen Blöcken mit dem Fehler zu sein.
Meine Vermutung ist, dass es etwas ist, zu tun ist, irgendwo, aber nicht veröffentlicht oder aus Müll sammelbare CFRetained.
A) Ist die eher ein Programmierfehler meinerseits oder etwas im Rahmen sein, die noch für die GC nicht richtig aktualisiert?
B) Was sind die Folgen der Ausgabe Diese Nachricht zu provozieren, wenn überhaupt? das heißt Muss ich die Aufmerksamkeit auf diese Nachricht zahlen oder kann ich es einfach ignorieren?
Anruf [2] [arg = 48]: thread_a003d720 | Start | main | NSApplicationMain | - [NSApplication run] | - [NSApplication nextEventMatchingMask: untilDate: INMODE: dequeue:] | _DPSNextEvent | BlockUntilNextEventMatchingListInMode | ReceiveNextEventCommon | RunCurrentEventLoopInMode | CFRunLoopRunInMode | CFRunLoopRunSpecific | __CFRunLoopDoObservers | _handleWindowNeedsDisplay | - [NSWindow displayIfNeeded] | - [NSView displayIfNeeded] | - [NSView _displayRectIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView:] | - [NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: TopView:] | - [NSView _recursiveDisplayAllDirtyWithLockFocus: visRect:] | - [NSView _drawRect: Clip:] | - [NSControl drawRect:] | - [NSMenuItemCell drawWithFrame: INview:] | - [NSPopUpButtonCell _drawIndicatorWithFrame: INview:] | - [NSPopUpButtonCell _indicatorFrameForCellFrame: INview:] | - [NSPopUpButtonCell _indicatorFrameForCellFrame: isFlipped:] | - [NSPopUpButtonCell _defaultIndicatorImage] | - [NSPopUpButtonCell _coreUIDefaultIndicatorImage] | + [NSImage imagenamed:] | + [NSImage _coreUIImageWithName:] | + [NSImage _coreUIImageWithBaseName: Zustand: backgroundStyle:] | - [NSCoreUIImageRep imageWithoutEffectsRect] | SizeForImageOptions | CUICopyMeasurements | CUIRenderer :: CopyMeasurements (CGRect, CGContext *, __CFDictionary const *, __CFArray const *) | CUIRenderer :: CopyImageMeasurements (lang, CUIContext const *, __CFArray const *, __CFDictionary *) | CreateImageSourceFromDisk (lang, CUIContext const *, long *, ohne Vorzeichen char *) | CUISharedArtReader :: CreateImageSource (lang) | CGImageSourceCreateWithDataProvider | CGImageReadCreateWithProvider | CGImageReadCreateWithData | _CGImageReadCreate | _CFRuntimeCreateInstance | CFAllocatorAllocate | auto_zone_allocate_object Anruf [4] [Arg = 0]: thread_b0103000 | thread_start | _pthread_start | auto_collection_thread (void *) | auto_collect_with_mode (Auto :: Zone *, unsigned int) | auto_collect_internal (Auto :: Zone *, int)
Lösung
Es ist eigentlich in einem untergeordneten Rahmen von Xcode verwendet, und jeder Garbage Collection-Anwendung, die NSImage nutzt auch das gleiche (harmlos, aber lästig) Meldung.
Eine Möglichkeit, diese zum Schweigen zu bringen ist hier: http://0xced.blogspot.com /2008/09/quietxcode.html
Andere Tipps
Ich sehe diese ganze Zeit mit Xcode. Es ist ein Speichermanagementproblem in Xcode selbst und gar nichts mit dem Programm zu tun.
Wenn die Fehler zu Ihrem Programm verwandt waren, würden sie im Debug-Fenster angezeigt (die, die nach oben zeigt, wenn Sie Umschalt-Befehl-r drücken) sowie in der Systemkonsole.
Diese Xcode malloc Nachrichten kommen nur in der Systemkonsole, so dass sie nicht Ihr Problem.
Nun, das Problem von Apple eine IDE-Freigabe, die Tonnen Speicherfehlerprotokolle in der Systemkonsole Dumps? Das vielleicht etwas zu befürchten sein:)