Например, когда мы вызываем say, рекурсивную функцию, последовательные вызовы хранятся в стеке. Однако из-за ошибки, если она идет бесконечно, ошибка "Ошибка сегментации" (как видно на GCC).
Разве это не было "переполнение стека"? В чем же основное различие между ними?
Btw, объяснение было бы более полезным, чем ссылки в Википедии (прошел через это, но не ответил на конкретный запрос).