Сначала проверьте, что в вашей программе нет ошибки в коде, вызывающей бесконечную рекурсию, ведущую к переполнению стека.
Если это не так, вы можете попытаться выделить больше стекового пространства для вашей программы. В Linux вы можете сделать это с помощью команды ulimit
bash:
ulimit -s 8000
или даже
ulimit -s unlimited
Если вам действительно нужно размотать стек, вы можете использовать setjmp / longjump в C или использовать исключения или продолжения, такие как:
struct ClearStack {} ;
void myLongComputationWhichCausesStackOverflow() {
// do something
if (needsToClearTheStack)
throw ClearStack() ;
// do something else
}
int main(int ac, char *av[]) {
try {
mylongcomputation() ;
// continuation of program
// no stack clearing occurred
}
catch(const ClearStack & cs) {
// the stack was cleared and do something appropriately
}
}
Он делает то, что вы хотите, но это не очень хороший стиль программирования. Обратите внимание, что вам нужно найти способ узнать, когда очищать стек. Это может быть довольно сложно, так как вы не можете знать, сколько места осталось в стеке, или вызов функции переполнит стек!