SORU
9 HAZİRAN 2009, Salı


Bir malloc nedenini bulmak için nasıl "çift özgür" hata?

Objective-C ve bu hatayı alıyorum: bir uygulama programlama yapıyorum

MyApp(2121,0xb0185000) malloc: *** error for object 0x1068310: double free
*** set a breakpoint in malloc_error_break to debug

Bir NSAutoreleasePool ben serbest zaman oluyor ve iki kez serbest bırakıyorum ne olduğunu çözemedim.

Nasıl onun kesme noktası ayarlamak mı?

Bir şekilde ne olduğunu bilmek bu "nesne 0x1068310" var mı?

şimdiden teşekkürler

Gonso

CEVAP
11 HAZİRAN 2009, PERŞEMBE


Ne zaman bir nesne "double-serbest", en yaygın nedeni (gereksiz yere) autoreleased bir nesne serbest olduğunu ve içeren autorelease havuz boşaltıldığında sonra autoreleased..

Ekstra yayın izlemek için en iyi şekilde kullanmak olduğunu tespit ettikNSZombieEnabledböyle büyük mükafat etkilenen yürütülebilir için ortam değişkeni. Bunu kullanmak için nasıl hızlı bir özet için, this CocoaDev wiki page kontrol edin. (Bu sayfa ek olarak, Apple birden çok kez hayatımı kurtarmış bazı Güncellemelerinden hata ayıklama kodu için son derece belirsiz ama yararlı bazı ipuçları belgelenmiş. Developer.apple.com — Kakao Vakfı çerçeve bölümüne atlar bağlantı) this Technical Note kontrol öneririm.

Düzenleme:Sık sık soruna neden olan nesneyi Güncellemelerinden hata ayıklayıcısını içinde takip edebilirsiniz, ama eğer Araçları size yardımcı olmak için kullanırsanız çok daha kolay. Böyle büyük mükafat, seçinVe yani; Performans Aracı &yani; Nesne Ayırma İle Başlarve soruna neden olan bir nesne oluşturulduğu için geri izleme için olması gerekir. (Bu ise yukarıda anlatıldığı gibi zombi etkin iseniz en iyi çalışır.)Not:Snow Leopard Aletleri, Çalıştır menüsünden de erişilebilir Zombiler bir araç ekler. Değer $29 yalnız olabilir! ;-)

Ayrıca related SO question here var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012