Ошибка Stack overflow, как избежать и что это?

836
06 февраля 2017, 16:46

Можете объяснить, когда возникает эта ошибка и как от нее избавиться?

Answer 1

Это означает, что в стеке недостаточно места.

Причины - например, слишком глубокая рекурсия (редко), или слишком большие локальные переменные (куда чаще), или и то и другое сразу :)

Как избавиться? Опять же, можно просто в настройках компилятора поднять размер стека.

Но надежнее и лучше - посмотреть, нет ли слишком глубокой (вплоть до бесконечности) рекурсии, заменить локальные массивы на выделяемые динамически.

int f()
{
    int a[1000000];

практически гарантированно даст переполнение стека. В отличие от

int f()
{ 
    int * a = new int[1000000];  // Только не забудьте потом удалить...

или

    vector<int> a(1000000);

Словом, смотрите, кто съедает много стековой памяти, и избавляйтесь от него...

READ ALSO
Visual studio 2012 пишет Symbols loaded

Visual studio 2012 пишет Symbols loaded

Когда запускаю любой проект она мне пишет

822
CMake ошибка в CLion

CMake ошибка в CLion

Всем привет

860
Парсинг определенного текста из файла

Парсинг определенного текста из файла

Нужно из файла (вот его текст) спарсить только что, что находится между тегом <keyMaterial> </keyMaterial>Как можно это реализовать на С++?

577