Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问大于数组大小的数组索引_C++ - Fatal编程技术网

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

C++ 访问大于数组大小的数组索引,c++,C++,我一直认为,如果访问的数组索引大于数组大小,会导致运行时错误吗?但它似乎很乐意运行并输出零。这是特定于编译器还是特定于操作系统?当您访问大于数组大小的数组索引时,某些不同的环境是否会导致运行时错误 对于eg int foo[5]; cout << foo[5] << endl; vector<int> bar(5); cout << bar[5] << endl; 在数组的边界之外访问它在C++中不是一个运行时错误:这是一个未定义

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

对于eg

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


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

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


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

嗯,您提供的代码是未定义行为的典型例子。< /P> 我一直认为,如果访问的数组索引大于数组大小,会导致运行时错误吗

vector类“.atsize_type pos方法执行边界检查,如果pos不在容器的范围内,则抛出std::out_of_range


试图读取或写入超出数组边界的未定义行为,如果是动态数组,程序可能会崩溃

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

它在这里导致内存东菱。

未定义的行为它是…-亦称为