Jakoś - jest tu prawdopodobnie bardzo dobrym określeniem
Po pierwsze, skąd masz taką informację - przejrzałem ten wątek, a także jego pełniejszą wersję na starym forum i jakoś nie rzuciło mi się 100% potwierdzenie. Pamiętaj, że w C++ są dwa rodzaje stringów, C-string i klasa string. Ty użyłeś tych drugich, a pewnie nie wiesz do końca jak one działają?
Więc napisz i uruchom sobie taki programik:
string a
while(1){
cin >> a;
cout << a.capacity() << ' ' << a.length() << endl;
}
Wpisuj po kolei coraz dłuższe stringi, zaczynając od stringu o długości jeden, a na koniec znowu od 1.
DO tego programiku możesz dodać a.clear() i nic to nie zmieni. Możesz też dodać, przed pętlą, a.resize(wartość), czy a.reserve(wartość) [np wartość < 10] i sprawdzić co będzie wtedy, gdy dodamy dłuższy string. Zasada nie ulegnie zmianie.
Gdy to potestujesz, będziesz miał prawdopodobnie odpowiedź na swoje pytanie. Na takiej samej zasadzie działają też i inne kontenery z STL, a napewno vector.
PS
Twoje sortowanie dodatkowo pogłębia powyższy efekt - długie stringi mogą być wczytywane na początek tablicy, ale w trakcie sortowania mogą "powędrować" i zostać skopiowane nawet na koniec. Nawet, gdyby udało Ci się "opanować" sigsegv to i tak miałbyś takim sposobem zapewne tle.
PS 2
Zadanie można zrobić sortując same wskaźniki do stringów [możliwe, że nawet do tych klasowych z c++], a nie same stringi jako takie. Pisał wyraźnie o tym nawet autor zadania, właśnie w tym wątku na starym forum.