分配NSMutableArray时的EXC_BAD_ACCESS

时间:2015-01-22 08:12:08

标签: ios objective-c game-center

这有点奇怪。

在我的代码中,我有这一行:

    NSMutableArray *unresolvedPlayers = [NSMutableArray arrayWithCapacity:3];

这似乎是一个完全有效的路线。我用这个堆栈跟踪在这一行上崩溃了(我用xxxxxxxxx替换了我的应用名称):

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0xc158f710
Triggered by Thread:  7

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x3870d648 syscall_thread_switch + 8
1   libsystem_platform.dylib        0x3879a79a _os_lock_handoff_lock_slow + 74
2   libsystem_malloc.dylib          0x38748ece szone_malloc_should_clear + 50
3   libsystem_malloc.dylib          0x3874c444 malloc_zone_calloc + 92
4   libsystem_malloc.dylib          0x3874c3d2 calloc + 46
5   libobjc.A.dylib                 0x380c8414 class_createInstance + 36
6   CoreFoundation                  0x2a5773d0 __CFAllocateObject2 + 8
7   CoreFoundation                  0x2a48c86a +[__NSArrayM __new:::::] + 38
8   CoreFoundation                  0x2a48fd7c -[__NSPlaceholderArray initWithCapacity:] + 100
9   CoreFoundation                  0x2a497e88 +[NSMutableArray arrayWithCapacity:] + 36
10  xxxxxxxxxx                      0x001730f4 -[HostManager setHost:timestamp:] (HostManager.m:703)
11  xxxxxxxxxx                      0x0016ff10 -[HostManager initSessionFromInvitation:] (HostManager.m:46)
12  xxxxxxxxxx                      0x000ea68e -[NetworkController updateWithMatch:] (NetworkController.m:894)
13  xxxxxxxxxx                      0x000ea418 __72-[NetworkController invitePlayersToMatch:playerGroup:completionHandler:]_block_invoke544 (NetworkController.m:844)
14  GameCenterFoundation            0x31263936 __72-[GKMatchmaker invitePlayersWithRequest:serverHosted:completionHandler:]_block_invoke601 + 42
15  libdispatch.dylib               0x38620420 _dispatch_call_block_and_release + 8
16  libdispatch.dylib               0x3862040c _dispatch_client_callout + 20
17  libdispatch.dylib               0x3862b1b0 _dispatch_main_queue_callback_4CF$VARIANT$mp + 708
18  CoreFoundation                  0x2a53762c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4
19  CoreFoundation                  0x2a535d4c __CFRunLoopRun + 1508
20  CoreFoundation                  0x2a482b2c CFRunLoopRunSpecific + 472
21  CoreFoundation                  0x2a48293e CFRunLoopRunInMode + 102
22  GraphicsServices                0x3183904c GSEventRunModal + 132
23  UIKit                           0x2da786ec UIApplicationMain + 1436
24  xxxxxxxxxx                      0x000503b2 main (main.m:16)
25  libdyld.dylib                   0x3865baac start + 0

到目前为止,我的内存有多可能被破坏,分配新的NSMutableArray会导致这种情况发生?我甚至不知道从哪里开始调试这个。我不确定这是否容易重现。

作为旁注,这是在邀请附近的玩家参加实时GameCenter比赛时发生的。

编辑:我刚刚意识到这在线程7上崩溃了。这就是Thread 7的样子:

Thread 7 name:  Dispatch queue: com.apple.root.default-qos
Thread 7 Crashed:
0   libobjc.A.dylib                 0x380cbf66 objc_msgSend + 6
1   GameCenterFoundation            0x31285efc -[GKMatchmaker(Nearby) inviteAnyNearbyPlayersWithRequest:] + 960
2   GameCenterFoundation            0x312636a8 __72-[GKMatchmaker invitePlayersWithRequest:serverHosted:completionHandler:]_block_invoke + 256
3   GameCenterFoundation            0x3129ae92 __39-[GKDispatchGroup notifyOnQueue:block:]_block_invoke44 + 10
4   libdispatch.dylib               0x38620420 _dispatch_call_block_and_release + 8
5   libdispatch.dylib               0x3862c2d6 _dispatch_root_queue_drain + 846
6   libdispatch.dylib               0x3862d1f6 _dispatch_worker_thread3 + 102
7   libsystem_pthread.dylib         0x3879de22 _pthread_wqthread + 666
8   libsystem_pthread.dylib         0x3879db74 start_wqthread + 4

所以,这可能是GameCenter的一个错误。

1 个答案:

答案 0 :(得分:1)

objc_msgSend中的崩溃可能表示已经释放了消息目标对象。尝试enable zombie objects并密切关注日志。