GNU/Linux >> Linux Esercitazione >  >> Linux

valgrind - Indirizzo ---- è 0 byte dopo un blocco di dimensione 8 allocato

strcpy aggiunge un carattere di terminazione nullo '\0' . Hai dimenticato di allocare spazio:

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

Devi aggiungere spazio per 5 caratteri:4 per ".tde" suffisso e un altro per il '\0' terminatore. Il tuo codice attuale ne alloca solo 4, quindi l'ultima scrittura viene eseguita nello spazio immediatamente dopo il blocco che hai allocato per il nuovo nome file (cioè 0 byte dopo di esso).

Nota: Il tuo codice ha un problema comune:assegna i risultati di realloc direttamente a un puntatore che viene riallocato. Questo va bene quando realloc ha successo, ma crea una perdita di memoria quando fallisce. La correzione di questo errore richiede la memorizzazione del risultato di realloc in una variabile separata e controllandola per NULL prima di assegnare nuovamente il valore a *filename :

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

Assegnazione diretta a *filename crea una perdita di memoria, perché il puntatore *filename puntato di seguito verrebbe sovrascritto in caso di errore, diventando irrecuperabile.


Linux
  1. Blocca un indirizzo IP su un server Linux

  2. Blocca un indirizzo IP su un server Windows

  3. Fail2Ban Howto:Blocca l'indirizzo IP usando Fail2ban e IPTables

  4. Modo portatile per ottenere la dimensione del file (in byte) nella shell?

  5. Realloc mantiene l'allineamento della memoria di posix_memalign?

Eccezione di dimensione blocco illegale – CKR_ENCRYPTED_DATA_LEN_RANGE [SoftHSM]

Differenza tra dimensione del blocco e dimensione del cluster?

Trovare la dimensione del settore di una partizione?

Linux:determinare la dimensione di un dispositivo a blocchi?

Perché Ls e Hexdump non sono d'accordo sulla dimensione del file?

Come bloccare un indirizzo IP usando .htaccess?