次のコードをコンパイルして実行するのはなぜですか。C++静的配列と新しい配列の境界にアクセスしていますか?
私は整数配列を作成し、そのサイズを10
に割り当てました。なぜ、プログラムは、forループ内で配列外の要素にアクセスしようとしているというエラーを返さないのですか?
さらに、私は新しい概念を理解したいと思います。私の使用法は正しいですか(私は割り当てられたメモリの量を割り当てていません)、新しいことは私が動的サイズの配列つまり、実行時にこの配列のサイズを無期限に増やすことができます。間違っている場合は修正してください)。もしこれが正しいのであれば、私の違いは何ですか?両方とも明らかに、この例でわかるように、実行時に私の配列のサイズを増やすことができます。私はスコープ、スタック、およびヒープの違いについて知っているので、両方の変数はmainで宣言され、次のコードを例として使用すると仮定します。 未定義の動作の配列結果の境界を越えて要素にアクセス
#include <iostream>
using namespace std;
int main()
{
int array[10];
int *arrays;
arrays = new int();
for (int i=0; i<450; i++)
{
arrays[i] = i;
cout << arrays[i] << " ";
array[i] = i;
cout << array[i] << endl;
}
return 0;
}
これはコンパイルエラーではないため、未定義の動作です。 –
C++言語では、コンパイラが配列境界違反を検出する必要はなく、実際には試していません。 –