Statestack est effectivement créé en globla, mais il faut aussi que les objets mis dedans le soient, car si tu crée state1 en local sans utiliser new dans ta fonction Init(), il sera détruit à la sortie de la fonction, et au final, tu auras dans ta pile un pointeur qui pointera dans une zone mémoire non aloué et où il n'y a rien => résultat crash de l'application quand tu va appeler un élément de la pile.
Donc il te faut faire des new pour tout objets mis dans la pile. Et du coup faire des delete avant la suppression de la pile (car sinon tu supprime la pile sans supprimer les objets contenus).