iOS schlechter Zugriff unmöglich zu finden

7

Ich stecke seit so vielen Stunden mit einem dummen schlechten Zugang fest. Ich kann es nicht finden. Ich hoffe, dass einige von euch in der Lage sein werden, mir die Antwort ins Licht zu zeigen. Im folgenden Code erscheint es in der Zeile: NSString * stringCallVisit = [[NSString alloc]initWithFormat:..... Ich kann nicht verstehen, alle Objekte sind lokal der Methode außer dem Parameter theIntervention.

Wenn ich die Methode NSString * stringCallVisit = [[NSString alloc]initWithFormat:... kommentiere, wird der schlechte Zugriff nicht angezeigt, auch wenn ich id obj = callVisit.injectionby; anstelle von; Also nehme ich an, dass der schlechte Zugriff nicht vom callVisit-Objekt, sondern sicherlich vom stringCallVisit-Objekt stammt. Aber warum ich es nur auf dem Zinken instanziiere, wo der schlechte Zugang erscheint.

Danke für Ihre Hilfe,

%Vor%

BEARBEITEN:

Ich habe getan, was Sie gesagt haben, aber ich bin nicht in der Lage, das Protokoll zu verstehen, und ich habe keine Adresse für das Info-Malloc erhalten. Ich bin ein bisschen verloren:)

BEARBEITEN Hier ist das Protokoll. Aber es ist seltsam, aber den App-Absturz an einem anderen Ort kennen.

%Vor%     
Amnysia 20.10.2011, 00:28
quelle

4 Antworten

1

Beachten Sie, dass Gewicht, Höhe und Fls doppelte Werte sind und Sie dennoch einen% d (Ganzzahl) Platzhalter für sie verwenden. Du wirst in diesem XML lustige Werte bekommen. - Magma vor 45 Minuten

Ich bestätige nur% d durch% .2f ersetzen Sie das Problem! Vielen Dank für Ihre Hilfe und Ihre Zeit! Und speziell Magma für seine Augen :) -

    
Amnysia 20.10.2011, 16:15
quelle
16

Legen Sie NSZombieEnabled , MallocStackLogging und guard malloc im Debugger. Wenn Ihre App abstürzt, geben Sie dies in der gdb-Konsole ein:

%Vor%

Ersetzen Sie 0x543216 durch die Adresse des Objekts, das den Absturz verursacht hat, und Sie erhalten einen viel nützlicheren Stack-Trace und es hilft Ihnen, die genaue Zeile in Ihrem Code zu lokalisieren, die das Problem verursacht.

Weitere Informationen finden Sie in diesem Artikel.

Bearbeiten: Es sieht so aus, als ob Ihnen nicht mehr genug Speicher zur Verfügung steht. Haben Sie eine didReceiveMemoryWarning Methode implementiert? Wenn dies der Fall ist, legen Sie einen NSLog ein, um herauszufinden, ob Sie wenig Speicher haben.

    
chown 20.10.2011 00:37
quelle
2

Verwenden Sie XCode 3 oder 4? Wenn Sie 3 verwenden, empfehle ich dringend ein Upgrade auf 4.

Wenn du 4 verwendest, drücke CMD-I, um es in Instrumenten zu starten, und wähle das "Zombies" -Profil. Führen Sie dann die App-Ausführung zum Absturzpunkt durch, und die Instrumente fangen sie ab. Sie erhalten ein graues Popup-Callout mit einem Link, klicken Sie auf den Link, der Sie zum Zuordnungsverlauf führt. Ganz rechts befindet sich das aufrufende Modul, in dem Sie die markierte Zeile im Quellcode, in dem der Speicher zugewiesen wurde, doppelt anklicken können.

Mein Verdacht ist Ihr callVisits-Array, das nicht von einer init- oder copy-Methode zurückgegeben wird - Sie sollten es nicht explizit freigeben, es sei denn, Sie verwenden init oder copy / mutableCopy-Methoden oder Sie behalten es explizit bei.

    
Jay Imerman 21.10.2011 03:16
quelle
1

Ich nehme an, dass eine Ihrer callVisit-Komponenten kein Objekt ist, sondern ein Skalar (int, float, char usw.). Beachten Sie, dass jede Komponente von callVisit, die in der format-Anweisung genannt wird, eine gültige Objektreferenz sein muss, da sie codiert ist.

    
Hot Licks 20.10.2011 01:22
quelle