arrayen newPerson har du ju satt till 0 element, så klart att size blir 0.
De olika formerna av alloc (minnesallokering) är grundläggande i C, så fort du har dynamiska datastrukturer så måste du själv tilldela minnesutrymme. Och, vilket närmast är ännu värre, frigöra minne när det inte används!
(char *)malloc( 10 * sizeof( char ) );
sizeof( char ) returnerar antalet bytes typen char använder
10 * sizeof( char ) ger alltså plats för 10 st variabler av typen char
malloc(...) reserverar minnesplats för dessa
(char *)... typecastar referensen till minnet till att bli en char-pekare