Как я могу получить переполнение стека в C ++ и Unix? - PullRequest
2 голосов
/ 05 декабря 2011

Мне интересно, как получить ошибку переполнения стека на простом примере, таком как:

int recursSum (int n)
{
   return (n==1)? 1:n+recursSum(n-1);
}

Я задаю этот глупый вопрос, потому что у меня только какая-то ошибка сегментации , даже если пустая функция вызывает себя ...

Я что-то упускаю или есть защита или что-то, что мешает мне сделать это?

Ответы [ 4 ]

6 голосов
/ 05 декабря 2011

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

3 голосов
/ 05 декабря 2011

Переполнение стека - это тип ошибки сегментации, похоже, ваша система только что выдала общую ошибку.

Вы можете прочитать больше здесь: http://en.wikipedia.org/wiki/Segmentation_fault

3 голосов
/ 05 декабря 2011

Если функция вызывается с отрицательным или целочисленным аргументом 0, вы столкнетесь с бесконечной рекурсией. Тем не менее, компилятор, скорее всего, может вызвать оптимизацию этой конкретной функции, и вы никогда не увидите переполнение стека, кроме как в режиме отладки. Ошибка сегментации лежит где-то еще.

0 голосов
/ 05 декабря 2011
Foo()

{

    float f[1024];

    Foo();

}

f - фиктивная переменная, которая поможет быстро заполнить стек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...