Почему возникает ошибка сегментации? Я хочу найти все факторы числа и поместить их в вектор. У меня есть другая функция, которая делает то же самое, кроме использования цикла while. Поэтому я решил попробовать рекурсию. "i" сначала начинается с 1, если я не добавлю другое значение в main.cpp. Линия "cout i" находится там, поэтому я вижу, где она терпит неудачу.
void recurfact ( std::vector <int> & facts, int numb, int i )
{
std::cout << i << std::endl;
if ( i > numb )
{
return;
}
if ( numb % i == 0 )
{
facts.push_back(i);
i = i + 1;
recurfact ( facts, numb, i );
}
else
{
i = i + 1;
recurfact ( facts, numb, i );
}
}
Таким образом, это работает, если я тестирую его с номерами меньше 42800 + / - 100. Если я попробую любое число, большее, чем просто, оно просто остановится. Отладчик говорит, что существует ошибка сегментации. Если я прокомментирую строку push_back, она все равно падает с этим значением i.
Однако, если я начну с я = 45000, я могу проверить число от 45000 до 85000 без проблем. Выше чем 85000 он падает.
Мне нравится знать, почему это происходит.
Компиляция с gcc в cygwin на windows 7.
Сообщение об ошибке из gdb:
Программный сигнал SIGSEGV, ошибка сегментации. 0x000007fefcec10d6 в WaitForSingleObjectEx() из /cygdrive/c/Windows/system32/KERNELBASE.dll
См. Этот документ о неисправности сегментации в системах Unix:
http://www.cs.nyu.edu/exact/core/doc/stackOverflow.txt
В Unix-подобных системах программы могут вызывать ошибку "Ошибка сегментации". Это может быть связано с переполнением стека, особенно из рекурсивных вызовов функций или огромных наборов данных. В нашей демо-программе "Pi" (см. "$ (CORE_PATH)/progs/pi") мы вычисляем Pi на любое количество желаемых бит или цифр. Ниже приведены некоторые результаты тестирования, когда переполнение стека будет происходить на разных платформах, используя их размеры стека по умолчанию.
vector<>
в качестве стека) с итерацией, которая перемещает хранилище в кучу. Конечно, есть несколько отличных алгоритмов, если вы просто хотите найти простые числа.