Agregar dentro de deserializar al final del for: mensajes[index + 1] = NULL;
De esta forma en el for de paquete de servidor.c no queda basura al final de mensajes y se cierra
Antes:
void** deserializar_paquete(t_paquete* paquete_serializado) {
int offset, size_mensaje;
// lo tratamos como un arreglo de mensajes
void** mensajes = NULL; // TODO: need free()
offset = 0;
// tamaño de cada mensaje dentro del paquete, varía según el contenido de cada
// mensaje
size_mensaje = 0;
for (int index = 0, n = 1; offset < paquete_serializado->buffer->size;
n++, index++) {
mensajes = realloc(mensajes, sizeof(t_buffer) * n);
t_buffer* mensaje = empty_buffer();
size_mensaje = (int)(paquete_serializado->buffer->stream + offset);
mensaje->size = size_mensaje;
// nos desplazamos 4 bytes, para no pisar el `buffer->size` que escribimos
// con el anterior memcpy
offset += sizeof(int);
mensaje->stream = malloc(size_mensaje); // TODO: need free()
memcpy(mensaje->stream,
paquete_serializado->buffer->stream + offset,
size_mensaje);
// agregamos el mensaje como un elemento de un arreglo
mensajes[index] = (t_buffer*)mensaje;
// nos desplazamos buffer->size es decir el tamaño de buffer->stream
// asi en la sig. iteración obtenemos el siguiente mensaje
offset += size_mensaje;
}
// mensajes[paquete_serializado->buffer->size] = NULL;
return mensajes;
}
Despues:
void** deserializar_paquete(t_paquete* paquete_serializado) {
int offset, size_mensaje;
// lo tratamos como un arreglo de mensajes
void** mensajes = NULL; // TODO: need free()
offset = 0;
// tamaño de cada mensaje dentro del paquete, varía según el contenido de cada
// mensaje
size_mensaje = 0;
for (int index = 0, n = 1; offset < paquete_serializado->buffer->size;
n++, index++) {
mensajes = realloc(mensajes, sizeof(t_buffer) * n);
t_buffer* mensaje = empty_buffer();
size_mensaje = (int)(paquete_serializado->buffer->stream + offset);
mensaje->size = size_mensaje;
// nos desplazamos 4 bytes, para no pisar el `buffer->size` que escribimos
// con el anterior memcpy
offset += sizeof(int);
mensaje->stream = malloc(size_mensaje); // TODO: need free()
memcpy(mensaje->stream,
paquete_serializado->buffer->stream + offset,
size_mensaje);
// agregamos el mensaje como un elemento de un arreglo
mensajes[index] = (t_buffer*)mensaje;
// nos desplazamos buffer->size es decir el tamaño de buffer->stream
// asi en la sig. iteración obtenemos el siguiente mensaje
offset += size_mensaje;
// ponemos NULL al final de los mensajes para poder facilmente identificar el final y que no haya basura
mensajes[index + 1] = NULL;
}
// mensajes[paquete_serializado->buffer->size] = NULL;
return mensajes;
}
Agregar dentro de deserializar al final del for: mensajes[index + 1] = NULL; De esta forma en el for de paquete de servidor.c no queda basura al final de mensajes y se cierra
Antes:
Despues: