no malloc and free needed