Xcode 5.1.1을 사용하여 Mac OS (10.8.4) 앱을 작성했습니다 (막히면 카드 여덟 가지 게임을 해결할 수 있습니다) 효율성이나 메모리 사용에 신경을 쓰지 마라. 재귀 프로그램 (가능한 이동, 재귀, 다음 이동 생성 등의 트리를 생성합니다.) 때문에 많은 메모리가 필요합니다 (24 GB가 있음) 스택을 증가 시켰습니다 (-Wl, - stack_size, 0x4000000). 그러나,에 관계없이 스택 크기의, 나는 같은 깊이 (약 170 수준)에서 항상 EXC_BAD_ACCESS 코드 = 2를 얻을, 그것은있는 NSString stringWithFormat을 사용하는 줄에 항상 : 같은 : 라인이있다깊은 NSString 문자열에 대한 EXC_BAD_ACCESS stringWithFormat :
NSString *temp = [NSString stringWithFormat:@"%d",value]; // value is an integer
이전 모든 재귀 수준에서 정상적으로 실행되었습니다. 특정 줄을 제거하면 다른 stringWithFormat 줄에서 예외가 발생합니다. 마치 스택 크기 설정에 관계없이 NSString에 자체 제한이있는 것과 같습니다. ARC 대신 가비지 수집을 사용할 때 이전에 작동했습니다. (Xcode에서 ARC로 변환하길 원했습니다.)
좀비를 확인했지만 오류 줄에서 참조되는 개체가 없습니다.
왜 스택 크기에 관계없이 EXC_BAD_ACCESS를 가져올 수 있으며 항상 stringWithFormat :?에 있습니까?
추가 충돌 로그 :
Process: EightOff Solver [11701]
Path: /Users/USER/Library/Developer/Xcode/DerivedData/EightOff_Solver-dqppnsumvcsujjflailrgqxogyij/Build/Products/Debug/EightOff Solver.app/Contents/MacOS/EightOff Solver
Identifier: com.yourcompany.EightOff_Solver
Version: 1.0
Code Type: X86-64 (Native)
Parent Process: launchd [179]
User ID: 501
Date/Time: 2014-06-25 01:38:46.581 -0500
OS Version: Mac OS X 10.8.4 (12E55)
Report Version: 10
Sleep/Wake UUID: 561695D4-0498-43DC-9B0E-9417A5D5120D
Interval Since Last Report: 60266 sec
Crashes Since Last Report: 2
Per-App Crashes Since Last Report: 9
Anonymous UUID: 96F16B3C-9A73-63C2-B5CD-11CC51CFE612
Crashed Thread: 1 Dispatch queue: com.apple.root.default-priority
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000100400ec8
VM Regions Near 0x100400ec8:
MALLOC_TINY 0000000100100000-0000000100400000 [ 3072K] rw-/rwx SM=PRV
--> STACK GUARD 0000000100400000-0000000100401000 [ 4K] ---/rwx SM=NUL stack guard for thread 1
Stack 0000000100401000-0000000100483000 [ 520K] rw-/rwx SM=COW thread 1
Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff8eb18686 mach_msg_trap + 10
1 libsystem_kernel.dylib 0x00007fff8eb17c42 mach_msg + 70
2 com.apple.CoreFoundation 0x00007fff93d38233 __CFRunLoopServiceMachPort + 195
3 com.apple.CoreFoundation 0x00007fff93d3d916 __CFRunLoopRun + 1078
4 com.apple.CoreFoundation 0x00007fff93d3d0e2 CFRunLoopRunSpecific + 290
5 com.apple.HIToolbox 0x00007fff93a36eb4 RunCurrentEventLoopInMode + 209
6 com.apple.HIToolbox 0x00007fff93a36c52 ReceiveNextEventCommon + 356
7 com.apple.HIToolbox 0x00007fff93a36ae3 BlockUntilNextEventMatchingListInMode + 62
8 com.apple.AppKit 0x00007fff9a52a533 _DPSNextEvent + 685
9 com.apple.AppKit 0x00007fff9a529df2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
10 com.apple.AppKit 0x00007fff9a5211a3 -[NSApplication run] + 517
11 com.apple.AppKit 0x00007fff9a4c5bd6 NSApplicationMain + 869
12 com.yourcompany.EightOff_Solver 0x0000000100006ea2 main + 34 (main.m:13)
13 com.yourcompany.EightOff_Solver 0x0000000100001bc4 start + 52
Thread 1 Crashed:: Dispatch queue: com.apple.root.default-priority
0 libsystem_c.dylib 0x00007fff936c682d __vfprintf + 40
1 libsystem_c.dylib 0x00007fff936c4e16 vsnprintf_l + 254
2 libsystem_c.dylib 0x00007fff936bf462 snprintf_l + 127
3 com.apple.CoreFoundation 0x00007fff93d0ef3f __CFStringAppendFormatCore + 11199
4 com.apple.CoreFoundation 0x00007fff93d594fb _CFStringCreateWithFormatAndArgumentsAux + 107
5 com.apple.Foundation 0x00007fff9a03f13c +[NSString stringWithFormat:] + 170
6 com.yourcompany.EightOff_Solver 0x0000000100009b67 -[Card description] + 663 (Card.m:265)
7 com.yourcompany.EightOff_Solver 0x00000001000091f7 -[Card makeNewGameStates:] + 9031 (Card.m:211)
8 com.yourcompany.EightOff_Solver 0x0000000100005087 -[MyDocument recursiveOnGameState:depth:] + 6903 (MyDocument.m:1195)
9 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
10 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
... [deleted identical lines numbered 11 through 170]
171 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
172 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
173 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
174 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
175 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
176 com.yourcompany.EightOff_Solver 0x00000001000054b2 -[MyDocument recursiveOnGameState:depth:] + 7970 (MyDocument.m:1210)
177 com.yourcompany.EightOff_Solver 0x00000001000029c2 -[MyDocument startBackgroundThread] + 2706 (MyDocument.m:882)
178 com.apple.CoreFoundation 0x00007fff93d8f09c __invoking___ + 140
179 com.apple.CoreFoundation 0x00007fff93d8ef37 -[NSInvocation invoke] + 263
180 com.apple.Foundation 0x00007fff9a07da30 -[NSInvocationOperation main] + 34
181 com.apple.Foundation 0x00007fff9a075926 -[__NSOperationInternal start] + 684
182 com.apple.Foundation 0x00007fff9a07d0f1 __block_global_6 + 129
183 libdispatch.dylib 0x00007fff96ec4f01 _dispatch_call_block_and_release + 15
184 libdispatch.dylib 0x00007fff96ec10b6 _dispatch_client_callout + 8
185 libdispatch.dylib 0x00007fff96ec21fa _dispatch_worker_thread2 + 304
186 libsystem_c.dylib 0x00007fff93654d0b _pthread_wqthread + 404
187 libsystem_c.dylib 0x00007fff9363f1d1 start_wqthread + 13
Thread 2:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff8eb1ad16 kevent + 10
1 libdispatch.dylib 0x00007fff96ec3dea _dispatch_mgr_invoke + 883
2 libdispatch.dylib 0x00007fff96ec39ee _dispatch_mgr_thread + 54
Thread 3:
0 libsystem_kernel.dylib 0x00007fff8eb1a6d6 __workq_kernreturn + 10
1 libsystem_c.dylib 0x00007fff93654f4c _pthread_workq_return + 25
2 libsystem_c.dylib 0x00007fff93654d13 _pthread_wqthread + 412
3 libsystem_c.dylib 0x00007fff9363f1d1 start_wqthread + 13
Thread 4:
0 libsystem_kernel.dylib 0x00007fff8eb1a6d6 __workq_kernreturn + 10
1 libsystem_c.dylib 0x00007fff93654f4c _pthread_workq_return + 25
2 libsystem_c.dylib 0x00007fff93654d13 _pthread_wqthread + 412
3 libsystem_c.dylib 0x00007fff9363f1d1 start_wqthread + 13
Thread 5:
0 libsystem_kernel.dylib 0x00007fff8eb1a6d6 __workq_kernreturn + 10
1 libsystem_c.dylib 0x00007fff93654f4c _pthread_workq_return + 25
2 libsystem_c.dylib 0x00007fff93654d13 _pthread_wqthread + 412
3 libsystem_c.dylib 0x00007fff9363f1d1 start_wqthread + 13
Thread 6:
0 libsystem_kernel.dylib 0x00007fff8eb1a6d6 __workq_kernreturn + 10
1 libsystem_c.dylib 0x00007fff93654f4c _pthread_workq_return + 25
2 libsystem_c.dylib 0x00007fff93654d13 _pthread_wqthread + 412
3 libsystem_c.dylib 0x00007fff9363f1d1 start_wqthread + 13
Thread 1 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000208 rbx: 0x00007fff7ecb5a98 rcx: 0x00000001004014c0 rdx: 0x0000000100402d30
rdi: 0x0000000100401338 rsi: 0x00007fff7ecb5a98 rbp: 0x0000000100401250 rsp: 0x0000000100400e20
r8: 0x00000001004014c0 r9: 0x0000000000000003 r10: 0x0000000000000000 r11: 0x00000001004012b4
r12: 0x00000000000001ff r13: 0x0000000100401500 r14: 0x00000001004014c0 r15: 0x0000000100402d30
rip: 0x00007fff936c682d rfl: 0x0000000000010202 cr2: 0x0000000100400ec8
Logical CPU: 0
6/30/14 편집은 추가 :이는 내가 5.1.1 엑스 코드를 업그레이드 할 때 (5.0) 발생하기 시작했다. 변경된 빌드 설정 때문일 수 있습니까? (나는 그들이 전에 있었는지 모르겠다.) iMac (늦은 2012 년) 인텔 코어 i5, OS 10.8.4를 사용하고 있습니다. 일부 설정은 다음과 같습니다. Base SDK : Latest (10.8로 제한 시도했습니다); 유효한 아키텍처 i386, x86_64 (i386 또는 x86_64 만 사용해 보았습니다.) 배포 대상 : 10.8.
7/1/14 편집 추가 : (UI 작업의 기본 대기열에 dispatch_async와 함께) NSOperationQueue를 사용하고있었습니다. NSOperationQueue를 제거하면 충돌이 해결되었지만 지금은 UI를 업데이트 할 수 없습니다 (NSLog는 출력을 제공함). 백그라운드 대기열을 사용하여 dispatch_async()에서 내 루프를 실행하면 충돌이 발생하고 UI가 업데이트되지 않습니다. 분명히 백그라운드 작업은 변경할 수없는 NSString과 관련된 리소스 제한이 있습니다. 내 UI를 업데이트하지 않더라도 충돌이 발생합니다 (항상 NSString을 생성 할 때).
전체 스택 추적을 게시하십시오. – trojanfoe
대부분의 경우 일부 메모리를 덮어 쓰며 결과적으로 어딘가에 메모리 할당이 실패합니다. 소스 코드와 특히 C 배열에 쓰는 곳을 확인하십시오. – gnasher729
코드를 더 많이 보여야합니다. – trojanfoe