2016-03-29 13 views
0

aracılığıyla yüklendiğinde eşyalarım MKPolyline polylineWithCoordinates çöker xcode

CLLocationCoordinate2D outline[track.lastGeo -track.firstGeo]; 

CLLocationCoordinate2D upper = ((CLLocation*)track.locations[track.firstGeo]).coordinate; 
CLLocationCoordinate2D lower = ((CLLocation*)track.locations[track.firstGeo]).coordinate; 

int count = 0; 
for (int i = track.firstGeo; i <= track.lastGeo; i++) { 

    CLLocation *firstLoc = [track.locations objectAtIndex:i]; 

    outline[count++] = firstLoc.coordinate; 

    if([firstLoc coordinate].latitude > upper.latitude) upper.latitude = [firstLoc coordinate].latitude; 
    if([firstLoc coordinate].latitude < lower.latitude) lower.latitude = [firstLoc coordinate].latitude; 
    if([firstLoc coordinate].longitude > upper.longitude) upper.longitude = [firstLoc coordinate].longitude; 
    if([firstLoc coordinate].longitude < lower.longitude) lower.longitude = [firstLoc coordinate].longitude; 
} 

_outline = [MKPolyline polylineWithCoordinates:outline count:count -1]; 

başlatıldı ve xcode aracılığıyla dağıtılan ettiğinizde düzgün çalışır ediliyor değilken Aşağıdaki kod çalışır. Ama geçici itunes aracılığı uygulamasını yüklediğinizde, o kimsenin yani yeni bir sebep düşünebiliyor

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

Filtered syslog: 
None found 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 MapKit       0x000000018de19484 -[MKMultiPoint _wrapAroundTheDateline:count:] + 108 
1 MapKit       0x000000018de195d8 -[MKMultiPoint _setCoordinates:count:] + 184 
2 MapKit       0x000000018de195d8 -[MKMultiPoint _setCoordinates:count:] + 184 
3 MapKit       0x000000018de13a74 +[MKPolyline polylineWithCoordinates:count:] + 84 

çöküyor?

  • yerleri xcode ile yüklemek bir
  • i xcode herhangi ayıklama/bırakma seçeneklerini değiştirmek yoktu sadece iyi çalışır olarak var mı, bütün bu farklı cihazlarda çöküyor
  • standart, ama sadece geçici
  • MapKit açık kaynak olmadığından

i

[MKMultiPoint _wrapAroundTheDateline:count:] 

ne hiçbir fikrim yok ya neden crashe

DÜZENLEME 1

Bu yol çok fazla yer Malloc çalışırken MKMultiPoint aşağı kaynar orada.

malloc: *** mach_vm_map(size=2405744640) failed (error code=3) 

XCode'un en iyileştirme düzeyi buna neden olabilir mi? Hata ayıklama ile çalıştırıldığında, bu değil, bu yüzden belki hızlandırmak için yer kullanımı hızlandırmak ve böylece burada sorun neden olabilir yayın kodu kadar şeyler hızlandırmak için?

Tek yaptığım yaklaşık 1000 koordinatlı bir Polyline oluşturuyor (belki 5 km'lik gerçek yaşam süresi)!

+0

ile sona erdi. Bu, Xcode'dan koşmakla ad hoc'dan koşmak arasındaki büyük farktır, bu yüzden Xcode'tan bir sürüm oluşturma olarak çalışarak aynı farkı alabilirsiniz. – matt

+0

Bu, aynı davranış, aynı çarpışma oldu mu. MKPolyline'ın yaratılması, ona geçirilen tüm değerler yasaldır. – NikkyD

+0

Aslında bellek yetersiz mi? Döngü gövdesi etrafında bir otomatikleştirme havuzu koymak yardımcı olur mu? Yeni adres dezenfektanı kullanmayı denediniz mi? – matt

cevap

0

Bu, hata ayıklamanın ne kadar zor olabileceğinin mükemmel bir örneğidir.

suçlu

CLLocationCoordinate2D outline[track.lastGeo -track.firstGeo]; 

biri, çalışır gibi bir dizi atama düşünürdüm oldu. Ancak, bir sebepten ötürü, xcode'un kod iyileştiricisi bunu tamamen batırdı. Yani kötü

int count = 0; 

bu tamsayılar değer döngü ve sonra içinde değişiyor o. Böylece Polyline çılgın büyük bir tam sayı verildi ve böylece bellek sınırını aştı. int const bildirilmesi bile bir şekilde yardımcı olmadı, bir şekilde bellek adresi berbattı ve her zaman üzerine yazıldı. SADECE kod optimizasyonları açık, bu yüzden sadece sürüm oluşturma şeması ile, hata ayıklama ile değil. MKPolyline bir denemeden önce bir NSLog(@"%d", count) koyarak, bunu bir deneyin. Bunu polyline çizmeden yapmazdım. Tam ve kesin çılgınlık.

Daha uyumlu bir NSUInteger için int'u değiştirmek de yardımcı olmadı.

Ben bir yayın oluşturma olarak çalıştırmayı deneyin bu

const NSUInteger size = (track.lastGeo -track.firstGeo +1); 

CLLocationCoordinate2D *outline = calloc(size, sizeof(CLLocationCoordinate2D));