Переполнение стека обычно вызывается вызовом функций вложенности слишком глубоко (особенно просто при использовании рекурсии, то есть функции, которая вызывает себя) или выделения большого объема памяти в стеке, где использование кучи было бы более подходящим.