我有一个最小的代码之后的行为:根本原因为不同的输出在去除打印语句“出的矢量误差的范围”
vector<int> result(9);
int count = 0;
cout << "test1\n"; // removing this line causes 'core dump'
for (int j=0; j < 12; j++)
result[count++] = 1;
cout << "test2\n";
结果是尺寸9的载体,和'for'循环我正在访问超出范围的元素。
现在,除去TEST1线,代码运行没有任何错误;但与此COUT线,我得到
*错误的`./out_of_range_vector2' :免费():无效的下一个尺寸(快速):0x0000000001b27c20 *
我明白,这告诉我,免费()遇到了未分配我的malloc()一些内存,但什么样的作用这是否COUT线在这里踢球?我想更多地了解这里发生的事情。更具体地讲,我有两个问题:
- 是这个引起的对这些2箱子堆不同的状态?如果是这样,究竟有什么不同?
- 为什么有时范围内的元素进行访问不会导致错误?是因为它没有超过矢量的容量?
走出界限会导致[* undefined behavior *](http://en.cppreference.com/w/cpp/language/ub),这就是故事的结尾。 –
根据定义,未定义的行为是未定义的。 –
如果你对范围检查感兴趣,可以考虑['std :: vector :: at'](http://en.cppreference.com/w/cpp/container/vector/at)。 –