다음과 같이 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입니다!