-1

これは C++ の for ループです。実行時にセグメンテーション違反が発生しない理由がわかりません。

int main() 
{
   int arr[5];
   for (int x = 0; x <= 5; x++)
       {
           arr[x] = x;
       }
   return 0; 
}
4

3 に答える 3

1

Andy Prowl は、それが未定義の動作であると言って、すでに最もよく答えていると思います。

しかし、クラッシュしない理由の詳細に興味がある場合、少なくとも私のコンパイラでは、変数xは配列の直後のスタック上の位置に割り当てられます。に代入xするとarr[5]、実際にはxそれ自体に代入するだけです。

明らかに、これはコンパイラごとに異なる場合があります。少なくとも 1 つの特定のコンパイラが何をしているのかを知りたいと思うかもしれません。

于 2013-05-07T20:53:04.853 に答える