提前感谢您看一下。
当我尝试运行我在Code :: Blocks中用C编写的程序时,我收到一条Windows错误消息。有趣的是它编译得很好,如果我降低我正在测试的程序的上限运行良好。
详细说明:
当我尝试运行该程序时,首先我得到一个Windows弹出窗口,上面写着“X.exe已经停止工作.Windows正在检查问题的解决方案”。不久之后,这变为“X.exe已停止工作。一个问题导致程序停止正常工作.Windows将关闭程序并通知您是否有解决方案。(关闭程序)”我单击关闭程序按钮,然后我看到命令提示符显示“进程返回255< 0xFF>执行时间3.940秒按任意键继续”。
我有Windows 8。
我正在使用GNU GCC编译器。
如果我将“upto”更改为100000,程序运行正常。
以下是代码:
/************************************************
* Finds the starting integer under 1000000 that
* produces the longest Collatz sequence, and the
* length of said sequence.
*************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <limits.h>
#define upto 1000000
int main()
{
long i;
long long j;
long long max = LONG_LONG_MAX;
long length = 0;
long number = 0;
long penull = 0;
long len[upto];
for (i = 0; i < upto; i++) (len[i] = 0);
// counts length of Collatz sequence for starting integers from 1 to 999999
for (i = 1; i < upto; i++)
{
j = i;
while (j != 1)
{
assert (j <= (max - 1)/3);
if (j%2 == 0) (j = j/2);
else (j = 3*j + 1);
len[i]++;
if (j < i)
{
len[i] = len[i] + len[j];
j = 1;
}
}
// stores length of the longest sequence and the starting integer producing it
if (len[i] > length)
{
length = len[i];
number = i;
}
// stores a duplicate length for later comparison
else if (len[i] == length) (penull = len[i]);
}
if (length == penull) (printf("There are at least two!"));
else printf("%ld produces a Collatz sequence of length %ld", number, length + 1);
return 0;
}
答案 0 :(得分:0)
将数组len
移到main
函数之外。堆栈的大小有时是有限的,局部变量存储在堆栈中。通过将其移到外面,可以使其成为全局变量。