Is this going to leak memory or is it ok? Please also let me know if there is something else that I need to pay attention to.typedef struct {int len;UC * message; }pack;pack * prepare_packet_to_send(const int length,const unsigned char tag,const int numargs, ... ){pack *layer=  malloc(sizeof(pack));va_list listp;va_start( listp, numargs );int step = 0;layer->message = (unsigned char *) malloc(length);layer->len = length;int i = 0;int len = 0;unsigned char *source_message ; for( i = 0 ; i < numargs; i++ ){source_message = va_arg( listp, unsigned char *);len = va_arg( listp, long);memcpy(layer->message+step, source_message, (long) len);step+=len;}va_end( listp ); return layer;}main(){pack *test = call prepare_packet_to_send(sizeof(var1)+sizeof(var2),any tag,any args) // are following two frees correct/enough? or is there something else i need to do to     prevent mem leak?free(test->message);free(test);}
Free memory outside function
c;memory management