如何在 C/C++ 中 运行 Ackermann 函数不出错?
How to run Ackermann's Fuction without error in C/C++?
那么如何在没有 运行ning 的情况下 运行 阿克曼函数进入 Segmentation fault (core dumped)
错误,因为我的程序试图 access/expand 它无法访问的内存?也许将 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;
}
为重现结果添加的代码
这几乎可以肯定不是 "too much memory used" 问题。请注意,GCC 没有内存限制。如果你有一个真正的限制,那是你的操作系统的一个功能。在 Mac OS 或其中一种 UNIX 变体下,请参阅 ulimit 命令。我不知道你在 Windows.
下做什么
如果您遇到分段错误,那是因为您试图访问尚未分配的内存。这很可能是由于以下三种情况之一:
- 取消引用空指针
- 取消引用完全未初始化的指针
- 取消引用存储在已重用的内存中的指针(这
可以指向谁知道在哪里)
您的核心文件应该会告诉您是哪一行代码导致了段错误。这应该可以帮助您追踪它发生的原因。
那么如何在没有 运行ning 的情况下 运行 阿克曼函数进入 Segmentation fault (core dumped)
错误,因为我的程序试图 access/expand 它无法访问的内存?也许将 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;
}
为重现结果添加的代码
这几乎可以肯定不是 "too much memory used" 问题。请注意,GCC 没有内存限制。如果你有一个真正的限制,那是你的操作系统的一个功能。在 Mac OS 或其中一种 UNIX 变体下,请参阅 ulimit 命令。我不知道你在 Windows.
下做什么如果您遇到分段错误,那是因为您试图访问尚未分配的内存。这很可能是由于以下三种情况之一:
- 取消引用空指针
- 取消引用完全未初始化的指针
- 取消引用存储在已重用的内存中的指针(这 可以指向谁知道在哪里)
您的核心文件应该会告诉您是哪一行代码导致了段错误。这应该可以帮助您追踪它发生的原因。