GNU/Linux >> Tutoriels Linux >  >> Linux

valgrind - Adresse ---- est de 0 octet après un bloc de taille 8 alloué

strcpy ajoute un caractère de fin nul '\0' . Vous avez oublié de lui allouer de l'espace :

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

Vous devez ajouter un espace pour 5 caractères :4 pour ".tde" suffixe, et un de plus pour le '\0' terminateur. Votre code actuel n'en alloue que 4, donc la dernière écriture est effectuée dans l'espace immédiatement après le bloc que vous avez alloué pour le nouveau nom de fichier (c'est-à-dire 0 octet après).

Remarque : Votre code a un problème commun - il attribue les résultats de realloc directement à un pointeur en cours de réallocation. C'est bien quand realloc réussit, mais crée une fuite de mémoire en cas d'échec. La correction de cette erreur nécessite de stocker le résultat de realloc dans une variable distincte et en vérifiant qu'elle contient NULL avant de remettre la valeur à *filename :

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

Affectation directe à *filename crée une fuite mémoire, car le pointeur le *filename a pointé ci-dessous serait écrasé en cas d'échec, devenant irrécupérable.


Linux
  1. Exception de taille de bloc illégale - CKR_ENCRYPTED_DATA_LEN_RANGE [SoftHSM]

  2. Trouver la taille du secteur d'une partition ?

  3. Linux - Déterminer la taille d'un périphérique bloc ?

  4. Pourquoi Ls et Hexdump ne sont-ils pas d'accord sur la taille du fichier ?

  5. Bloquer une adresse IP sur un serveur Linux

Comment bloquer une adresse IP en utilisant .htaccess ?

Fail2Ban Howto :Bloquer l'adresse IP à l'aide de Fail2ban et IPTables

Pourquoi la taille d'un répertoire est-elle toujours de 4096 octets sous Unix ?

Bonne taille de bloc pour le clonage de disque avec diskdump (dd)

Déterminer la taille d'un périphérique bloc

comment la taille de la page est-elle déterminée dans l'espace d'adressage virtuel ?