我一直认为如果我访问的数组索引大于数组大小会导致运行时错误?但它似乎很高兴运行并输出零。这个编译器是特定的还是OS特定的?访问数组大小大于数组大小的数组索引时,某些不同的环境是否会导致运行时错误?访问数组索引大于数组大小
例如;
int foo[5];
cout << foo[5] << endl;
vector<int> bar(5);
cout << bar[5] << endl;
我一直认为如果我访问的数组索引大于数组大小会导致运行时错误?但它似乎很高兴运行并输出零。这个编译器是特定的还是OS特定的?访问数组大小大于数组大小的数组索引时,某些不同的环境是否会导致运行时错误?访问数组索引大于数组大小
例如;
int foo[5];
cout << foo[5] << endl;
vector<int> bar(5);
cout << bar[5] << endl;
访问它的边界之外的数组它不是C++运行时错误:它是不确定的行为,这意味着任何事情都可能发生,包括什么都没有。
在C++中没有“运行时错误天使”,只有“未定义的行为守护进程”。
那么,你提供的代码是未定义行为的典型例子。
我一直认为如果我访问的数组索引大于数组大小,它会导致运行时错误?
载体类.at(size_type pos)
方法执行边界校验,并抛出std::out_of_range
如果pos
不是在容器的范围内。
这是不确定的行为试图读取或写入超出了数组的边界,如果它是一个动态数组,该程序可能会崩溃。
char c1[] = "123";
char c2[2] = "A"; // ok c2[0] = 'A', c2[1] = '\0';
cout << c1 << endl; // 123 ok
cout << c2 << endl; // A ok
c2[5] = 'M'; // writing to the out bound of the array
cout << c1 << endl; // 1M3 ??!!
cout << c2 << endl; // A ok
它导致内存dongling在这里。
未定义的行为,它是... –
[未定义的行为链接上SO](http://stackoverflow.com/a/1239977/620908) - 也被称为[鼻恶魔](http://catb.org/行话/ HTML/N /鼻demons.html) –