malloc: *** Fehler: falsche Prüfsumme für freigegebenes Objekt – Objekt wurde wahrscheinlich nach der Freigabe geändert
Lesezeit: 4 Minuten
Ich habe ein großes Problem mit meiner iOS-App: Sie stürzt manchmal ohne detaillierten Debug-Fehler ab. Der Stack-Trace ist leer. Dies sind die einzigen zwei Zeilen im Stack-Trace:
Absturzstart in UIApplicationMain bei “symbol stub for: -[_UIHostedTextServiceSession dismissTextServiceAnimated:]”.
und melden Sie “libsystem_c.dylib`malloc_error_break”.
in com.apple.main-thread.
Der Fehler im Xcode-Debugger (mit angeschlossenem Gerät):
malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Ich habe einen Breakpoint in malloc_error_break mit libsystem_c.dylib ohne Feedback vom Debugger gesetzt. Ich habe keine Idee, dieses Problem zu lösen.
Das ist schwer. Sie müssen im Grunde den Code untersuchen, um das Problem zu finden. Wenn Sie herausfinden können, um welche Art von Objekt es sich handelt, hilft das sehr. (Übrigens, ARC oder manuelle Referenzzählung?)
– Heiße Licks
7. November 2013 um 18:41 Uhr
Ich bin mir ziemlich sicher, dass der einzige Nutzen darin besteht, einen Haltepunkt zu setzen malloc_error_break ist, dass es Ihnen die Möglichkeit gibt, sich das beschädigte freigegebene Objekt anzusehen, und der Inhalt des Speichers kann Ihnen dabei helfen, den Punkt zu verfolgen, an dem Sie es überschreiben.
– Das ist nicht mein richtiger Name
7. November 2013 um 19:45 Uhr
Es ist eine C++-Bibliothek und das Projekt ist MRC.
– Benutzer2776543
8. November 2013 um 7:48 Uhr
Mein Freund hat meinen C-Code auf einem Mac kompiliert, und es gab diesen Fehler zur Laufzeit. Es kompilierte und lief jedoch problemlos unter Linux. Es scheint ein Mac-spezifisches Problem zu sein.
– Geremia
2. Februar 2016 um 21:05 Uhr
Versuchen Sie einfach, das Projekt zu bereinigen CMD+SHIFT+K. es half 🙂
– korgx9
26. April 2018 um 6:56 Uhr
Pedro Soares
Um die Ursache des Problems zu finden, gehen Sie in Xcode zu Product > Scheme > Edit Scheme und aktivieren Sie auf der Registerkarte Diagnostics alle Malloc-Einstellungen und Guard Malloc.
Führen Sie damit Ihre Anwendung erneut aus, und Xcode stoppt an der Zeile, die das Problem verursacht.
dyld: Die eingefügte Bibliothek ‘/usr/lib/libgmalloc.dylib’ konnte nicht geladen werden, da das Bild nicht gefunden wurde
– onmyway133
3. Mai 2016 um 14:02 Uhr
Guard Malloc aktivieren hat bei mir funktioniert, obwohl es erwähnenswert ist, dass es den Simulator anscheinend erheblich verlangsamte, daher würde ich es nur aktivieren, wenn ich ein tatsächliches Problem debugge.
– Arcady-Bob
4. Juli 2016 um 22:32 Uhr
Ich verwende macOS Big Sur 11.1, Xcode 12.3, als ich Xcode ausprobiert habe, Produkt > Schema > Schema bearbeiten, passiert nichts, ich habe es mehrmals versucht, sogar neu gestartet und dann erneut versucht, dasselbe wieder, nichts passiert.
– Platten
30. Dezember 2020 um 15:49 Uhr
Benutzer1118321
Da Sie sich im Debugger befinden, sollten Sie sich den Speicherort ansehen 0x208a7614 und sehen, was da ist. Die Daten im Speicher können hilfreich sein, um herauszufinden, was schief läuft.
Was passiert, ist eines der folgenden:
Sie befreien ein Objekt zweimal,
Sie geben einen Zeiger frei, der nie zugewiesen wurde
Sie schreiben über einen ungültigen Zeiger, der zuvor auf ein bereits freigegebenes Objekt zeigte
Da der Stack-Trace leer ist, kann es hilfreich sein, Ihrem Code an verschiedenen Stellen einige Debugging-Protokollanweisungen hinzuzufügen, um zu sehen, ob Sie eingrenzen können, wo im Code das Problem liegt. Die Verwendung der Speicherwerkzeuge in Instruments kann ebenfalls hilfreich sein. Sie könnten versuchen, NSZombies einzuschalten, aber das sieht nach einem C-Zuordnungsproblem und nicht nach einem Objective-C-Problem aus.
Wurde vor dem Absturz noch etwas in die Konsole geschrieben? Wenn ja, kann es Ihnen zeigen, woher das Problem kommt.
Es gibt eine dritte Möglichkeit, die von der Fehlermeldung vorgeschlagen wird: OP schreibt über einen ungültigen Zeiger, der zuvor auf ein bereits freigegebenes Objekt zeigte.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
7. November 2013 um 16:32 Uhr
Ah, guter Punkt. Ich dachte, der Fehler würde bei einem Anruf angezeigt free()aber es handelt sich um einen Anruf zu malloc(). Guter Fang. Ich werde den Text entsprechend aktualisieren.
– Benutzer1118321
7. November 2013 um 18:09 Uhr
Vierte mögliche Ursache: Schreiben über das Ende eines zugewiesenen Blocks hinaus in einen anderen, derzeit nicht zugewiesenen Block.
– Das ist nicht mein richtiger Name
7. November 2013 um 19:43 Uhr
Wenn Zombies nichts fangen, kann Wächter Malloc vielleicht helfen.
– GregParker
7. November 2013 um 20:52 Uhr
Diese Antwort hat mich in meinem C-Programm gerettet. Ich hatte versehentlich ein zu kleines Array zugewiesen, um ein sprintf-Ergebnis an einer anderen Stelle in meinem Code zu speichern. Die Überprüfung der Speicheradresse sagte mir genau, welches die störende Zeichenfolge war, weil ich in der Lage war, ihren Inhalt zu erkennen.
– sudo
26. April 2014 um 21:29 Uhr
Ravi Raja Jangid
Hallo Leute, ich habe diese Lösung gefunden, wenn Sie die Nib- oder Xib-Schnittstelle verwenden und Sie mit diesem Problem konfrontiert sind, wenn Sie ein Viewcontroller-Objekt verschieben möchten, tritt dieser Fehler irgendwann auf und Ihre App stürzt ab (insbesondere Fehler auf dem iPad). Lösung:
Versuchen Sie nicht, in diesem Zustand zu pressen.
Wenn Sie dieses Problem haben. Gehen Sie zu: Produkt->Schema->Diagnose-> dann aktivieren mollic gaurd rand und Zombie-Objekt
dann schließen, dann Produkt-> Stopp, dann erneut Produkt erstellen und ausführen. viel Glück
14084000cookie-checkmalloc: *** Fehler: falsche Prüfsumme für freigegebenes Objekt – Objekt wurde wahrscheinlich nach der Freigabe geändertyes
Das ist schwer. Sie müssen im Grunde den Code untersuchen, um das Problem zu finden. Wenn Sie herausfinden können, um welche Art von Objekt es sich handelt, hilft das sehr. (Übrigens, ARC oder manuelle Referenzzählung?)
– Heiße Licks
7. November 2013 um 18:41 Uhr
Ich bin mir ziemlich sicher, dass der einzige Nutzen darin besteht, einen Haltepunkt zu setzen
malloc_error_break
ist, dass es Ihnen die Möglichkeit gibt, sich das beschädigte freigegebene Objekt anzusehen, und der Inhalt des Speichers kann Ihnen dabei helfen, den Punkt zu verfolgen, an dem Sie es überschreiben.– Das ist nicht mein richtiger Name
7. November 2013 um 19:45 Uhr
Es ist eine C++-Bibliothek und das Projekt ist MRC.
– Benutzer2776543
8. November 2013 um 7:48 Uhr
Mein Freund hat meinen C-Code auf einem Mac kompiliert, und es gab diesen Fehler zur Laufzeit. Es kompilierte und lief jedoch problemlos unter Linux. Es scheint ein Mac-spezifisches Problem zu sein.
– Geremia
2. Februar 2016 um 21:05 Uhr
Versuchen Sie einfach, das Projekt zu bereinigen CMD+SHIFT+K. es half 🙂
– korgx9
26. April 2018 um 6:56 Uhr