views:

433

answers:

2

Hello All,

I had a EXC_BAD_ACCESS message in my console. I read about the environment variables NSZombieEnabled and MallocStackLoggingNoCompact on this site. I created my environment variables: NSZombieEnabled = YES and MallocStackLoggingNoCompact = 1. In the console, I saw

2010-03-01 19:13:46.924 CruzNomad[7952:207] * -[CFString stringByAddingPercentEscapesUsingEncoding:]: message sent to deallocated instance 0x58448e0

Then at the (gdb) prompt, I did info malloc-history 0x58448e0, which gave me:

Alloc: Block address: 0x058448e0 length: 64
Stack - pthread: 0xa0b33500 number of frames: 25
    0: 0x98e089bc in malloc_zone_malloc
    1: 0x21516aa in _CFRuntimeCreateInstance
    2: 0x2152bf8 in __CFStringCreateImmutableFunnel3
    3: 0x21567d9 in CFStringCreateCopy
    4: 0x21742fc in _CFStringCreateWithFormatAndArgumentsAux
    5: 0xdb546 in -[NSPlaceholderString initWithFormat:locale:arguments:]
    6: 0xdb4d8 in +[NSString stringWithFormat:]
    7: 0x23aa3 in -[BuisnessCardViewController viewDidLoad] at /Users/.../Classes/BuisnessCardViewController.m:85
    8: 0x3d6796 in -[UIViewController view]
    9: 0x347b4 in -[gm_menuViewController btn5_Pressed:] at /Users/.../Classes/menuViewController.m:535
   10: 0x357459 in -[UIApplication sendAction:to:from:forEvent:]
   11: 0x3baba2 in -[UIControl sendAction:to:forEvent:]
   12: 0x3bcdc3 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]
   13: 0x3bbb0f in -[UIControl touchesEnded:withEvent:]
   14: 0x370e33 in -[UIWindow _sendTouchesForEvent:]
   15: 0x35a81c in -[UIApplication sendEvent:]
   16: 0x3610b5 in _UIApplicationHandleEvent
   17: 0x2984ed1 in PurpleEventCallback
   18: 0x2197b80 in CFRunLoopRunSpecific
   19: 0x2196c48 in CFRunLoopRunInMode
   20: 0x298378d in GSEventRunModal
   21: 0x2983852 in GSEventRun
   22: 0x362003 in UIApplicationMain
   23: 0x2c8c in main at /Users/.../source/main.m:14
   24: 0x2bfa in start

Line 7 says the problem was in line 85 of BuisnessCardViewController.m. That line is here:

fullAddress = [NSString stringWithFormat:@"%@ %@", fullAddress, myString];

I'm appending the contents of fullAddress and myString and storing it back in fullAddress.

If I'm interpreting this correctly, it appears that after this line, fullAddress is deallocated. When I drop a breakpoint and hover over the variable, its value says "out of scope."

fullAddress works later in this method. I use it to send to send to Google for reverse geocoding in line 164 of the same method.

NSString    *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [fullAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

Even here, it says "out of scope." I'm stumped...any advice??

Thanks!

Thomas

+1  A: 

Have you tried appending string with format?

fullAddress = [NSString stringWithFormat:@"%@ %@", fullAddress, myString];

with:

- (NSString *)stringByAppendingFormat:(NSString *)format ...

like this:

[fullAddress stringByAppendingFormat:@" %@", myString];
stefanB
Thanks for the replies, folks. And no, I didn't realize Business was spelled wrong. @dreamlax - I didn't write that class (thankfully lol) :-)...I'm just working on specific features. Thanks for pointing it out though! I figured out my problem. Since stringWithFormat returns an autoreleased object, I just retained it right after I used it for the first time earlier in the method.[fullAddress retain];did the trick (as I now see mxg has suggested).Once again, thanks everybody!-Thomas
Thomas
+1  A: 

In most cases this happens when you don't retain an attribute which is object and send late messages to it in other methods, late.

So, where some strings are initialized try:

[fullAddress retain];

or

[myString retain];

depending which one is initialized in other method.

mxg
If the response is not totally clear, excuse me for my language please and write bellow comment.
mxg