如何在C / C ++中无错误地运行阿克曼函数?

时间:2019-10-31 19:47:04

标签: c++ c segmentation-fault ackermann

那么由于我的程序试图访问/扩展它无法访问的内存,如何运行Ackermann函数而不遇到Segmentation fault (core dumped)错误?也许将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: %d\n",i, j, ack(i, j));

    return 0;
}

添加了用于再现结果的代码

1 个答案:

答案 0 :(得分:-1)

几乎可以肯定,这不是“使用过多内存”的问题。请注意,GCC没有内存限制。如果您有实际限制,那取决于您的操作系统。在Mac OS或UNIX变体之一中,请参见ulimit命令。我不知道你在Windows下做什么。

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

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

您的核心文件应该告诉您导致seg错误的代码行。而且,它应该可以帮助您跟踪发生这种情况的原因。