Go: Panic: Laufzeitfehler: Ungültige Speicheradresse oder Null-Pointer-Dereferenzierung
Beim Ausführen eines Go-Programms kann es zu einer Panik kommen die folgende Fehlermeldung:
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x38 pc=0x26df]
Dieser Fehler weist häufig auf ein Problem in der Art und Weise hin, wie Ihr Programm Speicheradressen verarbeitet oder Hinweise. Lassen Sie uns eine mögliche Ursache aufschlüsseln:
Problem:Falsche Fehlerbehandlung
Im bereitgestellten Go-Code gibt es ein Problem in der getBody-Funktion bei der Verarbeitung der Antwort vom HTTP client:
if err != nil { return nil, err } ... if err != nil { return nil, err }
Die erste if err != nil-Prüfung erfolgt vor dem Zugriff auf die Antwort body:
if err != nil { return nil, err } res, err := client.Do(req)
Die Defer-Anweisung zum Schließen des Antworttextes (res.Body) wird jedoch sofort ausgeführt, noch vor der Fehlerprüfung. Dies könnte zu einem vorzeitigen Versuch führen, den Körper zu schließen, und zum Fehler „Ungültige Speicheradresse“ führen.
Lösung:
Um dieses Problem zu beheben, verschieben Sie den Fehler Überprüfen Sie, bevor Sie auf den Antworttext zugreifen und ihn schließen:
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
Auf diese Weise prüft der Code korrekt, ob potenzielle Fehler vorliegen, bevor er mit dem Antworttext arbeitet, und verhindert so das Fehler „ungültige Speicheradresse“.
Das obige ist der detaillierte Inhalt vonPanik geraten: Ungültige Speicheradresse oder Null-Zeiger-Dereferenzierung: Wie kann eine falsche Fehlerbehandlung behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!