为什么这段代码有超时?

时间:2012-12-17 14:28:32

标签: c++

  

可能重复:
  Why does this code crash?

请告诉我以下代码有什么问题???为什么会崩溃?

我无法在列表中存储collat​​z值,但是如果我想单独打印它们就可以完美运行。

#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;
}

2 个答案:

答案 0 :(得分:4)

堆叠分配可能是:

long t[1000000];失败。因此,当您实际写入数组时,它会调用未定义的行为。

动态分配或使用标准容器。

答案 1 :(得分:1)

在堆栈上创建一百万个元素最有可能导致堆栈溢出(没有双关语!)。这会导致i被覆盖,从而导致无限循环。