Take the 2-minute tour ×

I'm trying to interpret this crash log below, but I'm not sure if I understand it correctly. objc_msgSend() means that I'm sending a message to something that's already dealloced. So basically the data source disappears before the tableview can draw its cells?

How can I find the cause of this problem? I've tried using the atos tool to find the location of the crash by the hex it returns, but no avail.

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000020
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: tableView:objectValueForTableColumn:row:

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x93f89ed7 objc_msgSend + 23
1   com.apple.AppKit                0x936143ea -[NSTableView preparedCellAtColumn:row:] + 335
2   com.apple.AppKit                0x9362e8bc -[NSTableView _drawContentsAtRow:column:withCellFrame:] + 56
3   com.apple.AppKit                0x9362d92a -[NSTableView drawRow:clipRect:] + 1131
4   com.apple.AppKit                0x9362d362 -[NSTableView drawRowIndexes:clipRect:] + 360
5   com.apple.AppKit                0x9362bd3b -[NSTableView drawRect:] + 1144
6   com.apple.AppKit                0x936218fd -[NSView _drawRect:clip:] + 3721
7   com.apple.AppKit                0x9361efc9 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 2217
8   com.apple.AppKit                0x9361f95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
9   com.apple.AppKit                0x9361f95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
10  com.apple.AppKit                0x9361f95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
11  com.apple.AppKit                0x9361f95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
12  com.apple.AppKit                0x9361e55b -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 265
13  com.apple.AppKit                0x9361aea2 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
14  com.apple.AppKit                0x9357ba57 -[NSView displayIfNeeded] + 818
15  com.apple.AppKit                0x93544d40 -[NSWindow displayIfNeeded] + 204
16  com.apple.AppKit                0x9357628a _handleWindowNeedsDisplay + 696
17  com.apple.CoreFoundation        0x94f0ae02 __CFRunLoopDoObservers + 1186
18  com.apple.CoreFoundation        0x94ec6d8d __CFRunLoopRun + 557
19  com.apple.CoreFoundation        0x94ec6464 CFRunLoopRunSpecific + 452
20  com.apple.CoreFoundation        0x94ec6291 CFRunLoopRunInMode + 97
21  com.apple.HIToolbox             0x94188004 RunCurrentEventLoopInMode + 392
22  com.apple.HIToolbox             0x94187cf7 ReceiveNextEventCommon + 158
23  com.apple.HIToolbox             0x94187c40 BlockUntilNextEventMatchingListInMode + 81
24  com.apple.AppKit                0x9354c78d _DPSNextEvent + 847
25  com.apple.AppKit                0x9354bfce -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
26  com.apple.AppKit                0x9350e247 -[NSApplication run] + 821
27  com.apple.AppKit                0x935062d9 NSApplicationMain + 574
28  ...yapp.com 0x00003032 0x1000 + 8242
share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

This is the classic symptom of a memory management error. NSTableView is attempting to access some piece of data (perhaps an object value or an item or something?) that has been deallocated, but that the tableview still references.

There are a couple ways to solve this:

  • Run the static analyzer on your code. This will find any obvious leaks
  • Run your code using Instruments, specifically with the Zombies tool turned on. That will keep track of when you try to send a message to an object that's already been deallocated. It will also include tons of useful information, like when and where the object was created, when and where it was retained, released, and autoreleased, and finally where it was deallocated.
share|improve this answer
Here's the problem: It only crashes on certain machines, and that excludes mine. The arrays that power the tableview are protected in a way that when the tableview calls objectValueForTableColumn: and it detects that the array is nil, it creates it prior to passing it to the tableview. I dont release them anywhere except in dealloc. –  Prypiat Mar 19 '11 at 8:50
I doubt it was the object value that was overreleased—more probably the data source itself. –  Peter Hosey Nov 11 '12 at 2:46
add comment

Greg Parker is an engineer fir the Objective-C runtime. His blog post on interpreting crashes in objc_msgSend is essentially the definitive source: http://www.sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html.

Short answer: you have a memory corrupting bug.

share|improve this answer
add comment

Your Answer


