递归函数,传递参数 - 分段错误

时间:2014-03-20 13:09:50

标签: c segmentation-fault

我正在编写一个使用karatsuba算法乘以大数字的程序。 有一个递归函数。 在递归调用之前,我打印字符串值,它们没问题。然后,在开始的这个函数里面我再次打印传递的参数(我应该得到与递归调用之前完全相同的结果,早期的printf())并且我得到分段错误。

这不是在第一次执行函数时发生的,而是在许多递归调用之后发生的。

我的代码:

void karatsuba(char *result, char *first, char *second)
{
    printf(" %s    %s\n", first, second);
    <somewhere here conditional return to end recursion>
    ...
    ...
    printf(" %s    %s\n", temp_first, temp_second);
    karatsuba(temp, temp_first, temp_second);
    ...
    ...
}

在这种情况下会导致分段错误的原因是什么?

更新

谢谢大家的回答。堆栈溢出可能是原因。 我创建了一个在递归函数开始时递增的静态计数器,并在每个函数结束时递减并打印它。在分段故障时,其值表示深度为46778。

然后,我增加了堆栈大小,因为 Graham Borland 指向32MB。现在,计数器指示了159126个调用的深度,因此增加堆栈大小使其更好。

此函数中的数据总和为140B。将此值乘以堆栈深度可得到21MB,小于32MB。

毕竟,这个递归调用的数量太大了。在纸上进行计算我最多进入&lt; 10次递归调用我的数据。可以无限递归。 :(

2 个答案:

答案 0 :(得分:2)

你可能会破坏筹码。根据平台的不同,您可以增加流程可用的堆栈。例如,在类Unix的平台上,在运行程序之前在bash提示符处输入:

ulimit -s 32768

会将堆栈增加到32MB。

答案 1 :(得分:1)

最可能的原因是:
堆栈溢出

无限递归?

相关问题