如何在 C/C++ 中运行阿克曼函数而不会出错?



那么,如何在不因程序试图访问/扩展它无法访问的内存而导致Segmentation fault (core dumped)错误的情况下运行Ackermann函数?也许可以将GCC的内存限制扩展到256MB?它会在大约9MB的内存使用情况下导致此错误。我运行Manjaro Linux

代码:

#include<stdio.h>
int ack (int m, int n) {
if (m == 0)
return n + 1;
else if (n == 0)
return ack(m - 1, 1);
else
return ack(m - 1, ack(m, n - 1));
}
int main() {
int i, j;
for (i = 0; i <= 5; i++)
for (j = 0; j <=5; j++)
printf("Result for ackermann(%d, %d) is: %dn",i, j, ack(i, j));
return 0;
}

为再现结果而添加的代码

这几乎肯定不是"使用了太多内存"的问题。请注意,GCC没有内存限制。如果你有一个真正的限制,那就是你的操作系统的功能。在Mac操作系统或某个UNIX变体下,请参阅ulimit命令。我不知道你在Windows下做什么。

如果您遇到分段错误,那是因为您试图访问尚未分配的内存。这很可能是由于以下三种情况之一:

  • 取消引用空指针
  • 取消引用完全未初始化的指针
  • 取消引用存储在已重复使用的内存中的指针(可以指向谁知道在哪里(

您的核心文件应该告诉您是哪行代码导致了seg错误。这应该有助于你追踪它发生的原因。

相关内容

  • 没有找到相关文章

最新更新