Отладка EXC_BAD_ACCESS от NSString

У меня было сообщение EXC_BAD_ACCESS в моей консоли. Я считал о переменных среды NSZombieEnabled и MallocStackLoggingNoCompact на этом сайте. Я создал свои переменные среды: NSZombieEnabled = ДА и MallocStackLoggingNoCompact = 1. В консоли я видел

01.03.2010 19:13:46.924 CruzNomad [7952:207] *** - [CFString stringByAddingPercentEscapesUsingEncoding:]: сообщение, отправленное в освобожденный экземпляр 0x58448e0

Затем в (gdb) подсказка, я сделал информационную malloc-историю 0x58448e0, который дал мне:

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

Строка 7 говорит, что проблема была в гармонии 85 из BuisnessCardViewController.m. Та строка здесь:

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

Я добавляю содержание fullAddress и myString и храню его назад в fullAddress.

Если я интерпретирую это правильно, кажется, что после этой строки, fullAddress освобожден. Когда я отбрасываю точку останова и нависаю над переменной, ее значение говорит "из объема".

fullAddress работает позже в этом методе. Я использую его для отправки для отправки в Google для обратного геокодирования в строке 164 из того же метода.

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

Даже здесь, это говорит "из объема". Я озадачен... совет??

Спасибо!

Thomas

5
задан Thomas 2 March 2010 в 01:09
поделиться

2 ответа

В большинстве случаев это происходит, когда вы не t сохранять атрибут, являющийся объектом, и отправлять ему сообщения с опозданием другими методами.

Итак, если инициализируются некоторые строки, попробуйте:

[fullAddress retain];

или

[myString retain];

, в зависимости от того, какая из них инициализируется другим методом.

3
ответ дан 15 December 2019 в 00:59
поделиться

Вы пробовали добавить строку с форматом?

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

с помощью:

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

вот так:

[fullAddress stringByAppendingFormat:@" %@", myString];
1
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: