C ++プログラムで次のように範囲外の値を割り当てています。
#include <iostream>
using namespace std;
int main()
{
int array[2];
array[0] = 1;
array[1] = 2;
array[3] = 3;
array[4] = 4;
cout << array[3] << endl;
cout << array[4] << endl;
return 0;
}
プログラムはとを印刷3
し4
ます。それは不可能であるべきです。私はg ++ 4.3.3を使用しています
ここにコンパイルして実行するコマンドがあります
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
割り当て時のみarray[3000]=3000
、セグメンテーション違反が発生します。
gccが配列の境界をチェックしない場合、後で深刻な問題が発生する可能性があるため、プログラムが正しいかどうかをどのように確認できますか?
上記のコードを
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
これもエラーにはなりません。
vector
は自動サイズ変更しません!ただのUBです!