那么,如何在不因程序试图访问/扩展它无法访问的内存而导致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错误。这应该有助于你追踪它发生的原因。