这里发生了什么?
标题文件:
// .h file
public:
typedef size_t size_type;
static const size_type CAPACITY = 3;
private:
value_type data[CAPACITY];
size_type cursor;
实施档案:
// .cpp file
for (cursor = 0; cursor <= CAPACITY; ++cursor)
{
data[cursor] = -1;
std::cout << "cursorPos: " << cursor << std::endl;
}
输出:
cursorPos: 0
cursorPos: 1
cursorPos: 2
cursorPos: 3220176896
答案 0 :(得分:5)
您正在访问data
越界。它的大小为3
,因此有效索引的范围为[0,2]。您正在访问范围[0,3]。
访问数组越界是未定义的行为。您正在写入数组结束后发生在内存中的任何内容。在这种情况下,它似乎会影响索引的值。但你甚至不能依赖这种可重复的行为。
这将是一种设置具有特定值的数组元素的惯用方法:
#include <algorithm> // std::fill
#include <iterator> // std::begin, std::end, C++11 only
std::fill(std::begin(data), std::end(data), -1); // C++11
std::fill(data, data + CAPACITY, -1); // C++03