C 无限环路:递归函数
c++ infinite loop: recursive function
因此,当我使用 string str(" a:1,b:1")运行此功能时主,我进入一个无限的循环,然后进入分段故障(核心倾倒)。
void function (string str)
{
if (!str.empty() || str.at(0) != ',')
{
if (isalpha(str.at(0)))
{
if (str.find(',') != string::npos)
{
write(str.substr (0,str.find(','))); //takes this to another function to write in a file
function (str.substr (str.find(',')+1,str.length()-1));
}
else
{
write(str.substr (0,str.length()));
}
}
}
有人可以在这里熄灭吗?我如何将代码分开以分开A:1和B:1并单独发送到写功能。我使用的示例是一个简单的示例,但我将使用更长的字符串线。
我看到您的递归函数不使用正确的字符串长度。
function (str.substr (str.find(',')+1,str.length()-1));
substr
字符串类功能将长度作为第二个参数。在您的情况下,长度应该像str.length() - str.find(',') - 1
。否则,您将访问原始字符串内存之外。
if (isalpha(str.at(0))) {
{
没有关闭}
。
就isalpha
而言,这是一个旧的C函数,具有非常不友好的界面。它实际上迫使您将论点施加给unsigned char
,以避免不确定的行为。所以做到:
if (isalpha(static_cast<unsigned char>(str.at(0)))) {
!str.empty() || str.at(0) != ','
不能正确。它的读数为"如果字符串不为空或它是空的,并且它的第一个字符不是逗号" - 这将导致为空字符串抛出一个例外。您可能是指&&
而不是||
。
我进入无限循环,然后进入分段故障(核心倾倒)
您的代码中没有循环。很可能发生的是您的write
函数以导致无限递归的方式调用function
(例如,仅通过function("A:1,B:1");
),最终将堆栈溢出。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 任何人都可以查明我的递归函数中的错误吗?
- 递归函数的返回类型推导
- 递归函数调用在后台工作
- C 无限环路:递归函数