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