manu-projects / manu-cproject

1 stars 0 forks source link

Doc: Leaks en crear mensaje #69

Open neverkas opened 2 years ago

neverkas commented 2 years ago
  1. En paquete_create() creamos un buffer vacío con empty_buffer() y alocamos espacio para el buffer
  2. En main estamos pisando el espacio alocado en el paso anterior con un nuevo mensaje alocado en otro malloc
  3. Se generó un memory leak porque perdimos el buffer que creamos en el primer paso
t_buffer* empty_buffer() {
  t_buffer* nuevoBuffer = NULL;
  nuevoBuffer = malloc(sizeof(t_buffer));
}

t_paquete* paquete_create() {
  t_paquete* nuevo_paquete = NULL;
  nuevo_paquete = malloc(sizeof(t_paquete));

  nuevo_paquete->buffer = NULL;
  nuevo_paquete->buffer = empty_buffer();

  return nuevo_paquete;
}

t_buffer* crear_mensaje(char* texto) {
  int mensaje_longitud = strlen(texto) + 1; // sumamos el '\0' que indica fin de cadena
  int mensaje_size = sizeof(char) * mensaje_longitud;

  t_buffer* mensaje = NULL;
  mensaje = empty_buffer(); 
  mensaje->stream = malloc(mensaje_size); 
  mensaje->size = mensaje_size;

  // memcpy(destino, fuente, cantidad_bytes)
  memcpy(mensaje->stream, (void*)texto, mensaje_size);

  return mensaje;
}

void main(){
  t_paquete* paquete1 = paquete_create();
  t_buffer* mensaje1 = crear_mensaje("chau");
  paquete1->buffer = mensaje1;
}