va_start should be paired with va_end
use the correct deallocation function (or in this case, macro)
don't leak memory