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:

  1. Absturzstart in UIApplicationMain bei “symbol stub for: -[_UIHostedTextServiceSession dismissTextServiceAnimated:]”.
  2. 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

Benutzeravatar von Pedro Soares
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.

Schemadefinition

  • Es sei darauf hingewiesen, dass Guard Malloc nur im Simulator und nicht auf einem echten Gerät verfügbar ist. Sehen: developer.apple.com/library/ios/documentation/Performance/…

    – MBulli

    20. Januar 2015 um 23:19 Uhr

  • 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

Benutzeravatar von user1118321
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:

  1. Sie befreien ein Objekt zweimal,

  2. Sie geben einen Zeiger frei, der nie zugewiesen wurde

  3. 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


Benutzeravatar von Ravi Raja Jangid
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:

// So formatieren

UINavigationController *nav=[[UINavigationController      alloc]initWithRootViewController:yourViewControllerObj];

[self.navigationController  presentViewController:nav animated:true completion:nil];

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

1408400cookie-checkmalloc: *** Fehler: falsche Prüfsumme für freigegebenes Objekt – Objekt wurde wahrscheinlich nach der Freigabe geändert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy