don't cast the result of malloc