试图使用递归找到一个数字的所有因子,最终会得到大数字的分割错误
Trying to find all factors of a number using recursion, end up with a segmentation fault for large numbers
为什么会出现分段错误?我想找到一个数字的所有因子并将它们放在一个向量中。我还有另一个函数可以做同样的事情,但它使用 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,分段错误。 0x000007fefcec10d6 in 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 计算为任意数量的所需位 或数字。 以下是有关堆栈溢出何时会 在不同的平台上发生,使用其默认堆栈大小。
- 输出错误,问题是找到总和5000位数字cpp
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 错误含义;以二进制形式打印数字
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 分布MPI散点错误的数字
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 为什么C++显示错误的数字?
- 错误:数字常量 #define BOOT_PROTOCOL 0x00 之前的预期'>'
- 我的代码似乎在查找最大数字时存在语法错误
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- C++:按数字排序链表错误
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- 一个数字的提升精神解析器的分段错误
- C++铸造浮子错误地更改了数字
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- 从 if 循环输出的数字错误
- 我同时使用了莱布尼茨和瓦利斯公式来估算π但输出数字错误,我不知道我哪里出错了
- 对double进行重载比较以允许出现数字错误