C language dynamic memory allocation function analysis