Разработка какао: malloc: free_garbage: garbage ptr = 0x18a15e0, имеет ненулевой refcount = 1 ошибка - PullRequest
1 голос
/ 29 апреля 2009

Я разрабатываю приложение Какао, и время от времени при запуске моего приложения в XCode я получаю следующие виды сообщений в консоли отладки:

< Имя моего приложения > (952,0xb0103000) malloc: free_garbage: garbage ptr = 0x107b2f0, имеет ненулевой refcount = 1

Я включил MallocStackLogging и NSZombieEnabled и сделал malloc_history для нескольких из этих адресов и получил следы, аналогичные приведенным внизу.

Кажется, что общий поток ссылается на NSPopupButtonCell во всех блоках с ошибкой.

Полагаю, что это что-то делает, если что-то CFReserved где-то, но не выпущено или не сделано для сбора мусора.

A) С большей вероятностью это будет ошибка программирования с моей стороны или что-то в каркасе, которое еще не было должным образом обновлено для GC?

B) Каковы последствия проблемы, провоцирующей это сообщение, если таковые имеются? то есть мне нужно обратить внимание на это сообщение или я могу просто проигнорировать его?

Позвоните [2] [arg = 48]: thread_a003d720 | начать | главная | NSApplicationMain | - [NSApplication run] | - [NSApplication nextEventMatchingMask: tillDate: 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: состояние: backgroundStyle:] | - [NSCoreUIImageRep imageWithoutEffectsRect] | SizeForImageOptions | CUICopyMeasurements | CUIRenderer :: CopyMeasurements (CGRect, CGContext *, __CFDictionary const *, __CFArray const *) | CUIRenderer :: CopyImageMeasurements (длинные, CUIContext const *, __CFArray const *, __CFDictionary *) | CreateImageSourceFromDisk (длинный, CUIContext const *, long *, без знака символ *) | CUISharedArtReader :: CreateImageSource (длинный) | CGImageSourceCreateWithDataProvider | CGImageReadCreateWithProvider | CGImageReadCreateWithData | _CGImageReadCreate | _CFRuntimeCreateInstance | CFAllocatorAllocate | auto_zone_allocate_object Вызов [4] [arg = 0]: thread_b0103000 | thread_start | _pthread_start | auto_collection_thread (void *) | auto_collect_with_mode (Auto :: Zone *, без знака int) | auto_collect_internal (Auto :: Zone *, INT)

Ответы [ 2 ]

2 голосов
/ 30 апреля 2009

На самом деле это низкоуровневая структура, используемая XCode, и любое приложение для сбора мусора, использующее NSImage, также сгенерирует такое же (безобидное, но раздражающее) сообщение.

Один из способов заставить их замолчать здесь: http://0xced.blogspot.com/2008/09/quietxcode.html

0 голосов
/ 29 апреля 2009

Я вижу это все время с Xcode. Это проблема управления памятью в самом Xcode, и она никак не связана с вашей программой.

Если ошибки были связаны с вашей программой, они будут отображаться в окне отладки (которое появляется при нажатии shift-command-r), а также в системной консоли.

Эти сообщения XCode malloc появляются только в системной консоли, поэтому они не являются вашей проблемой.

Теперь, эта проблема Apple выпускает IDE, которая сбрасывает тонны журналов ошибок памяти в системную консоль? Это может быть о чем беспокоиться:)

...