请告诉我以下代码有什么问题???为什么会崩溃?
我无法在列表中存储collatz值,但是如果我想单独打印它们就可以完美运行。
#include <iostream>
long collatz(long);
int main()
{
using namespace std;
long i=3,t[1000000],p;
t[0]=0,t[1]=0,t[2]=0;
for(i=3; i<1000000; i++)
{
p=collatz(i);
t[i]=p;
}
cin.clear();
cin.get();
}
long collatz(long n)
{
long count=0;
do {
if (n%2==0)
{
n=n/2;
count+=1;
}
else
{
n=((3*n)+1);
count+=1;
}
} while(n!=1);
return count;
}
答案 0 :(得分:4)
堆叠分配可能是:
long t[1000000];
失败。因此,当您实际写入数组时,它会调用未定义的行为。
动态分配或使用标准容器。
答案 1 :(得分:1)
在堆栈上创建一百万个元素最有可能导致堆栈溢出(没有双关语!)。这会导致i
被覆盖,从而导致无限循环。