return NULL if malloc failed
Release 0.0.2