objective-c – 从NSString调试EXC_BAD_ACCESS
我的控制台中有一条EXC_BAD_ACCESS消息.我在
this site上读到了环境变量NSZombieEnabled和MallocStackLoggingNoCompact.我创建了我的环境变量:NSZombieEnabled = YES和MallocStackLoggingNoCompact = 1.在控制台中,我看到了
然后在(gdb)提示符下,我做了信息malloc-history 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行说问题出现在BuisnessCardViewController.m的第85行.那条线在这里: fullAddress = [NSString stringWithFormat:@"%@ %@",fullAddress,myString]; 我将附加fullAddress和myString的内容并将其存储在fullAddress中. 如果我正确地解释了这一点,那么看起来在此行之后,fullAddress被释放.当我删除断点并将鼠标悬停在变量上时,其值显示“超出范围”. fullAddress稍后在此方法中工作.我使用它发送给谷歌,以便在相同方法的第164行中进行反向地理编码. NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv",[fullAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 即使在这里,它也说“超出范围”.我很难过……任何建议? 谢谢! 托马斯 解决方法
在大多数情况下,当您不保留属性为对象并在其他方法中向其发送延迟消息时,会发生这种情况.
所以,在初始化一些字符串的地方尝试: [fullAddress retain]; 要么 [myString retain]; 取决于哪一个在其他方法中初始化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |