-3

重複の可能性:
このコードがクラッシュするのはなぜですか?

次のコードの何が問題になっているのか教えてください???なぜクラッシュするのですか?

コラッツの値を配列に格納することはできませんが、個別に印刷したい場合は完全に機能します。

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

2 に答える 2

4

次のスタック割り当てが発生する可能性があります。

long t[1000000];失敗します。したがって、実際に配列に書き込むと、未定義の動作が呼び出されます。

動的に割り当てるか、標準のコンテナを使用します。

于 2012-12-17T14:31:05.950 に答える
1

スタックに100万個の要素を作成すると、スタックオーバーフローが発生する可能性があります(しゃれは意図されていません!)。これによりi上書きされ、無限ループが発生します。

于 2012-12-17T14:33:29.617 に答える