Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

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

#cpp


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


Ответы

Ответ 1



Это означает, что в стеке недостаточно места. Причины - например, слишком глубокая рекурсия (редко), или слишком большие локальные переменные (куда чаще), или и то и другое сразу :) Как избавиться? Опять же, можно просто в настройках компилятора поднять размер стека. Но надежнее и лучше - посмотреть, нет ли слишком глубокой (вплоть до бесконечности) рекурсии, заменить локальные массивы на выделяемые динамически. int f() { int a[1000000]; практически гарантированно даст переполнение стека. В отличие от int f() { int * a = new int[1000000]; // Только не забудьте потом удалить... или vector a(1000000); Словом, смотрите, кто съедает много стековой памяти, и избавляйтесь от него...

Комментариев нет:

Отправить комментарий