【问题标题】:why segmentation fault error in recursive function为什么递归函数中的分段错误错误
【发布时间】:2020-05-01 12:31:52
【问题描述】:

您好,我编写了这段代码,目的是查看一个单词是否为回文,执行时出现分段错误,您能帮忙吗?这是查看单词是否为回文的好方法吗? 提前谢谢

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int m=1;

void palindromi();

int main (int argc, char *argv[]) {

    int len, a, i=0;

    if (argc != 2)
        exit(0);

    len = strlen(argv[1]);
    a = len-1;
    printf("La lunghezza della parola e' %d\n",len);

    palindromi(argv[1], len, a, i);

    return 0;
}

void palindromi(char *parola, int len, int a, int i) {

    if (i < len/2){
        if (parola[i] == parola[a]) {
            palindromi(parola, len, a--, i++);
        }
        else
            m = 0;
    }

    if (m == 1)
        printf("La parola e' palindroma\n");
    if (m == 0)
        printf("La parola non e' palindroma\n");
}

【问题讨论】:

  • 你需要它是递归的吗?你可以只用一段时间而不是你的 if...
  • 你在回文中缺少返回来拥有一个真正有用的功能。或者,如果您不使用全局变量,您不应该这样做......
  • 来自stackoverflow.com/questions/2989704/… 看来你应该用--a 和++i 调用回文,这里你有一个无限循环。在函数的开头使用这两个值的 printf 很容易检查!
  • 您好,感谢后续跟进,是的,问题是我写了 a-- 和 i++,现在已修复 thx

标签: c99


【解决方案1】:

Order of operations for pre-increment and post-increment in a function argument? 中所述,后递增和递减是在函数调用之后完成的。
在您的情况下,palindromi(parola, len, a--, i++); 与永远调用 palindromi(parola, len, a, i); 相同,这是一个无限循环。
应该是palindromi(parola, len, --a, ++i);,在递归调用之前正确更改了值。

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2014-11-05
    • 2013-03-05
    • 2020-03-08
    • 2021-11-01
    • 2017-12-25
    相关资源
    最近更新 更多