Mediumстек

Что такое stack overflow и как его избежать?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Stack overflow — исчерпание стека потока (обычно 1–8 МБ). Причины: глубокая рекурсия, большие локальные объекты, глубокая вложенность вызовов.

// ПЛОХО: бесконечная рекурсия
int bad(int n) { return bad(n + 1); }

// ПЛОХО: огромный массив в стеке
void f() {
    int arr[10'000'000];   // ~40 МБ — превысит стек
}

// ХОРОШО: большие объекты в heap
void f() {
    auto arr = std::vector<int>(10'000'000);
}

Защита: переписать рекурсию в итерации (explicit stack), большие объекты — в heap, при необходимости увеличить размер стека потока.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.