GNU/Linux >> Tutoriales Linux >  >> Linux

valgrind - Dirección ---- es 0 bytes después de un bloque de tamaño 8 asignado

strcpy agrega un carácter terminador nulo '\0' . Olvidaste asignarle espacio:

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

Debe agregar espacio para 5 caracteres:4 para ".tde" sufijo, y uno más para el '\0' terminador Su código actual asigna solo 4, por lo que la última escritura se realiza en el espacio inmediatamente después del bloque que ha asignado para el nuevo nombre de archivo (es decir, 0 bytes después).

Nota: Su código tiene un problema común:asigna los resultados de realloc directamente a un puntero que se está reasignando. Esto está bien cuando realloc tiene éxito, pero crea una pérdida de memoria cuando falla. Reparar este error requiere almacenar el resultado de realloc en una variable separada y verificándola para NULL antes de volver a asignar el valor 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
}

Asignando directamente a *filename crea una fuga de memoria, porque el puntero el *filename ha estado señalando a continuación se sobrescribiría en caso de falla y se volvería no recuperable.


Linux
  1. Excepción de tamaño de bloque ilegal:CKR_ENCRYPTED_DATA_LEN_RANGE [SoftHSM]

  2. ¿Diferencia entre el tamaño del bloque y el tamaño del clúster?

  3. ¿Realloc mantiene la alineación de memoria de posix_memalign?

  4. Buen tamaño de bloque para la clonación de discos con diskdump (dd)

  5. ¿Cómo evitar que la dirección MAC cambie después de desconectarse?

¿Cómo bloquear una dirección IP usando .htaccess?

¿Puedo suponer que el tamaño de long int es siempre de 4 bytes?

¿Por qué el tamaño de un directorio siempre es de 4096 bytes en Unix?

¿Cómo reducir el tamaño del intercambio después de que un sistema ya está instalado?

Determinar el tamaño de un dispositivo de bloque

¿Cómo se determina el tamaño de página en el espacio de direcciones virtuales?