EDIT :이 충돌의 원인을 발견했습니다! bbum는 버퍼 오버 플로우가 이것에 대한 매우 일반적인 원인임을 지적, 그래서 나는 내가 가진 유일한 버퍼 유형의 malloc을 바라 보았다 :과도하게 릴리스 된 개체 디버깅, NSZombie의 문제
closedList = (AINavigationCell **)malloc(baseCells.count * sizeof(AINavigationCell *));
나중에보다 훨씬 더 있었어야 배열의 경계, 과거 데이터를 덮어되었다 baseCells.count
. 고마워요.
질문 : 내가 개체를 해제 이상 - 나는 것을 나타내는 것 같다가 재생 될 EXC_BAD_ACCESS
동안 NSAutoreleasePool
이 5V를 가지고있다. 그래서 NSZombie
을 사용할 수 있지만 프로그램이 더 이상 충돌하지 않습니다. 콘솔에 어떤 정보도 기록되지 않습니다. NSZombie를 끄면 충돌이 다시 발생합니다. 이것의 의미는 무엇입니까? NSZombies가 이런 종류의 문제를 해결하는 데 사용되었다고 생각했습니다. NSZombie가 도움이되지 않는다면,이 over-release 객체를 조사 할 다른 방법이 있습니까?
또한 시뮬레이터에서 크래시가 재생성되지 않아 NSZombie에서 Instruments를 사용할 수 없습니다.
폴로 우잉은 충돌 지점에서 백 트레이스입니다.
#0 0x31ac8bc8 in _cache_fill()
#1 0x31acaf8e in lookUpMethod()
#2 0x31ac8780 in _class_lookupMethodAndLoadCache()
#3 0x31ac859a in objc_msgSendSuper_uncached()
#4 0x328014f0 in -[__NSArrayReverseEnumerator dealloc]()
#5 0x327b1f7a in -[NSObject(NSObject) release]()
#6 0x327b63c8 in CFRelease()
#7 0x327b58de in _CFAutoreleasePoolPop()
#8 0x320e132c in NSPopAutoreleasePool()
#9 0x30899048 in CAPopAutoreleasePool()
#10 0x30902784 in CA::Display::DisplayLink::dispatch()
#11 0x309027ea in CA::Display::IOMFBDisplayLink::callback()
#12 0x30076bfa in IOMobileFramebufferVsyncNotifyFunc()
#13 0x333dee6a in IODispatchCalloutFromCFMessage()
#14 0x327e8be6 in __CFMachPortPerform()
#15 0x327e06fe in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__()
#16 0x327e06c2 in __CFRunLoopDoSource1()
#17 0x327d2f7c in __CFRunLoopRun()
#18 0x327d2c86 in CFRunLoopRunSpecific()
#19 0x327d2b8e in CFRunLoopRunInMode()
#20 0x3094a4aa in GSEventRunModal()
#21 0x3094a556 in GSEventRun()
#22 0x32c14328 in -[UIApplication _run]()
#23 0x32c11e92 in UIApplicationMain()
#24 0x00002556 in main (argc=1, argv=0x2fdff660) at /Users/hyn/Desktop/MyProject-trunk/main.m:14
귀하의 제안은 맞았습니다. 버퍼 오버 플로우 문제가 발생했습니다. 시간을 절약 해 주셨고, 며칠간 디버깅을 하셨을 수도 있습니다. 그리고 나는 존재하지 않았던 과도한 거래를 열심히 찾고있었습니다. 정말 고맙습니다. – Morrowless
대단히 환영합니다. – bbum
bbum 시연은 굉장하지만 또 다시! :-) – Dad