访问大于数组大小的数组索引

时间:2016-12-26 22:42:30

标签: c++

我一直认为如果我访问的数组索引大于数组大小会导致运行时错误?但它似乎很乐意运行并输出零。此编译器是特定的还是特定于OS的?当您访问大于数组大小的数组索引时,某些不同的环境会导致运行时错误吗?

例如;

int foo[5];
cout << foo[5] << endl;


vector<int> bar(5);
cout << bar[5] << endl;

3 个答案:

答案 0 :(得分:1)

访问其边界之外的数组它不是C ++中的运行时错误:它是未定义的行为,它意味着任何事情都可能发生,包括什么都没有。

在C ++中没有“运行时错误天使”,只有“未定义的行为守护进程”。

答案 1 :(得分:1)

嗯,您提供的代码是未定义行为的典型示例。

  

我一直认为如果我访问的数组索引大于数组大小会导致运行时错误吗?

矢量类&#39;如果.at(size_type pos)不在容器范围内,std::out_of_range方法会执行边界检查并抛出pos

vector#at documentation

答案 2 :(得分:0)

尝试读取或写入超出数组范围的未定义行为,如果它是动态数组,程序可能会崩溃。

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

这会导致内存加密。

相关问题