Thats how currently gamestates works, they are not stackable, just replaceable. If you request a new state the previous one will be freed, so your code is correct with the (new GameSateTitle()) however the title gamestate memory is leaked if there is no credits.txt. you should:

title = new GameStateTitle();

and free title if loading of credits.txt fails.