Il problema penso sia abbastanza facile da risolvere, ma non riesco a giungere ad una soluzione definitiva

Ho una serie di stringhe, che verranno suddivise in gruppi.
La mia idea è di creare un array dinamico (in quanto il numero di "gruppi" viene definito dall'utente) e riempire l'array coi rispettivi valori. Questo dovrebbe essere lo schema di ciò che ho in mente:
codice:
                                     Stringa A
                                   /
            Gruppo 1 (TStringList) -- Stringa B
         /                         \
        /                            Stringa C
Array                              Stringa D
        \                         /
           Gruppo 2 (TStringList) -- Stringa E
                                  \ 
                                    Stringa F
Mentre questo è il mio codice:
codice:
Var ArrayValori : Array of TStringList;


SetLength(ArrayValori, NumeroGruppi);
ArrayValori[0].Add(**valore stringa a**);
Il codice per ora è estramemente semplice (mancano i due for per aggiungere le varie stringhe...) ma già non funziona, in quanto da un Access Violation durante l'esecuzione.
Cosa sbaglio?