Se allochi serialized all'interno della funzione e vuoi restituire tale valore, devi passare un puntatore a puntatore
void serialize(msg_t mess, char **serialized, int *size)
{
//...
*serialized = malloc(sizeof(char) * (bLen)); //Creo il buffer
e dal main
int main()
{
char *buff;
int *size;
msg_t mess = {5, "ciao"};
serialize(mess,&buff,size);
printf("Size: %d",*size); //Restituisce il valore corretto
printf("Add Buff: %d",buff) //Restituisce 0
free( buff ); // NON DIMENTICARE!
}
Secondo me, comunque, siccome poi devi spedire queste stringhe tramite un canale di comunicazione per il quale suppongo ti sia dato una dimensione massima del pacchetto (che può essere comunque la dimensione della struttura a cui aggiungi i separatori di campo), ti conviene passare un buffer preallocato alla funzione serialize(), senza scomodare la malloc!
void serialize(msg_t mess, char *serialized, int *size)
{
}
int main()
{
char tx_buffer[80];
int *size;
msg_t mess = {5, "ciao"};
serialize(mess,tx_buffer,&size);
}
Infine un'annotazione: se passi una struttura ad una funzione, passala tramite puntatore
void serialize(msg_t *mess, char *serialized, int *size)