为什么会出现分段错误?我想找到一个数字的所有因素并将它们放在一个向量中。我有另一个函数可以做同样的事情,只是它使用了一个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 值处崩溃。
但是,如果我从 i = 45000 开始,我可以毫无问题地测试从 45000 到 85000 的数字。高于 85000 就会崩溃。
我想知道为什么会这样。
在 Windows 7 上的 cygwin 中使用 gcc 进行编译。
来自 gdb 的错误消息是:
程序收到信号 SIGSEGV,分段错误。/cygdrive/c/Windows/system32/KERNELBASE.dll 中的 WaitForSingleObjectEx () 中的 0x000007fefcec10d6