GNU/Linux >> LINUX-Kenntnisse >  >> Linux

valgrind – Adresse ---- ist 0 Bytes nach einem zugewiesenen Block der Größe 8

strcpy fügt ein Null-Terminatorzeichen '\0' hinzu . Sie haben vergessen, Platz dafür zuzuweisen:

*filename = (char*)realloc(*filename, strlen(*collection_name)*sizeof(char)+5);

Sie müssen Platz für 5 Zeichen hinzufügen:4 für ".tde" Suffix und ein weiteres für '\0' Terminator. Ihr aktueller Code weist nur 4 zu, sodass der letzte Schreibvorgang in den Bereich unmittelbar nach dem Block erfolgt, den Sie für den neuen Dateinamen zugeordnet haben (d. h. 0 Bytes danach).

Hinweis: Ihr Code hat ein allgemeines Problem - er weist die Ergebnisse von realloc zu direkt zu einem Zeiger, der neu zugewiesen wird. Dies ist in Ordnung, wenn realloc ist erfolgreich, erzeugt aber ein Speicherleck, wenn es fehlschlägt. Um diesen Fehler zu beheben, muss das Ergebnis von realloc gespeichert werden in einer separaten Variablen und überprüfen Sie sie auf NULL bevor der Wert *filename wieder zugewiesen wird :

char *tmp = (char*)realloc(*filename, strlen(*collection_name)*sizeof(char)+5);
if (tmp != NULL) {
    *filename = tmp;
} else {
    // Do something about the failed allocation
}

Direkte Zuordnung zu *filename erzeugt ein Speicherleck, weil der Zeiger *filename auf die unten gezeigt wurde, würde bei einem Fehler überschrieben und wäre nicht wiederherstellbar.


Linux
  1. Ausnahme wegen illegaler Blockgröße – CKR_ENCRYPTED_DATA_LEN_RANGE [SoftHSM]

  2. Unterschied zwischen Blockgröße und Clustergröße?

  3. Ermitteln der Sektorgröße einer Partition?

  4. Linux – Bestimmen Sie die Größe eines Blockgeräts?

  5. Warum stimmen Ls und Hexdump nicht über die Dateigröße überein?

Wie blockiere ich eine IP-Adresse mit .htaccess?

Was ist diese Summe in der allerersten Zeile nach ls -l?

Kann ich davon ausgehen, dass die Größe von long int immer 4 Bytes beträgt?

Warum ist die Größe eines Verzeichnisses unter Unix immer 4096 Bytes?

Gute Blockgröße zum Klonen von Festplatten mit diskdump (dd)

Wie kann ich verhindern, dass sich die MAC-Adresse nach dem Trennen ändert?