1)
Der Speicher für das Stringarray ist zu klein, weil in parse das i um 1 zu klein ist.
Deshalb musst du auch
for (j = 1; j<=i; j++)
und
for (uint8_t k = 0; k<=cmd.count; k++)
schreiben, obwohl in beiden Fällen eigentlich ein "<" statt des "<=" richtig wäre.

2)
Code:
   char *cmd_backup = (char *) malloc( strlen((char *)cmd.command) * sizeof(char)+1 );
...
      return PARSE_ERROR;   // MÖGLICHES SPEICHERLECK
...
   free(cmd_backup); //allozierten Speicher freigeben.