Вы теряете память повсюду.
Вы должны попробовать и использовать стандартные контейнеры STL для обработки вещей такого типа.
Word** g_wordArray;
Это, вероятно, будет лучше представлено:
std::vector<Word> g_wordArray;
Тогда вместо того, чтобы выделять пространство для массива, вот так:
g_wordArray = new Word *[wrdCount];
-----
g_wordArray.reserve(wrdCount);
И последнее добавление новых элементов изменений заключается в следующем:
g_wordArray[wrdCount] = new Word( tmpArray );
g_wordArray[wrdCount]->GetFirstLetterLower();
g_wordArray[wrdCount]->GetWord();
------
g_wordArray.push_back(Word( tmpArray ));
g_wordArray[wrdCount].GetFirstLetterLower(); // Note we use . not ->
g_wordArray[wrdCount].GetWord();
Теперь ваш код больше не использует никаких неприятных новых операторов, и, следовательно, вы не потеряете память.