Originariamente inviato da Infernal
Salve, ho scritto una funzione che dovrebbe prendere in input una stringa e dare in output un array di stringhe contenenti ognuna una parola della stringa data.
siccome parliamo di c++ sarebbe meglio che tu utilizzassi la classe string che ti permette una manipolazione più agevole. Inoltre dovresti allocare la memoria con il costrutto new.

Comunque seguendo il tuo frammento di codice affronterei il problema in questa maniera.
1 - calcoli il numero di parole nella tua frase (questo lo puoi fare contando gli spazi o i \n o i \t, ci sono funzioni che controllano proprio se una carettere è spazio, \n o \t.
Attenzione che se vuoi utilizzare il ciclo for che hai riportato
for (int i = 0; frase[i] != ''; i++)
devi correggerlo in
codice:
 for (int i = 0; frase[i] != '\0'; i++)
sempre che frase sia un puntatore non nullo altrimenti anche questa versione non funziona.

2 - allochi out come puntatore di puntatore a stringa, come hai fatto e gli dai come memoria il numero delle parole trovate
3 - Ripeti il ciclo e trovi le stringhe una per una. Per ogni stringa devi allocare la memoria per contenerne una copia
out [num_della_stringa] = (char *) malloc ( lunghezza della stringa n-essima + 1);
Copi la stringa nella nuova memoria ricordandoti di terminare con \0 ( puoi usare la strncpy ).

dovrebbe essere tutto
ciao
sergio