Если вы используете C ++, то лучше использовать std :: string вместо char *.
В любом случае, вы должны понимать, что контейнер содержит указатели на символы, а не сами символы. Таким образом, при уничтожении он освобождает память, занятую указателями, но не указанную память.
В короткие сроки, вы должны освободить каждый символ * перед уничтожением / очисткой списка.