String (objekt) vs. char array

Wieso legst du da Speicher mit malloc() an? Das ist völlig unnötig. Du gibt ihn ja selbst gleich wieder frei. atoi() bricht selbst ab wenn es auf einen char trifft der keine Zahl ist. Also beim & und beim Leerzeichen. Du musst den Teil-String also nicht erst in ein extra Array kopieren.

http://www.cplusplus.com/reference/cstdlib/atoi/

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

Selbst wenn, würde hier ein lokales Array auf dem Stack ausreichen. Das macht man halt so groß wie der längste String sein kann und fertig.