阿曼耆那教|
假设我的向量大小定义为 6。
vector<int>v(6);
但是当我输出时,它不会给我错误。
cout<<v[7]; //works
我知道向量实际上是如何增长的,它们会预先定义一些大小x
并将其加倍。所以位置 7 是可以接受的。
但它仍然适用于位置 10000 为什么?为什么我可以访问到目前为止尚未声明的内存位置?
cout<<v[10000]; //works
阿明·蒙蒂尼
答案可以在 C++ 参考中阅读。
在这里你可以读到不会进行边界检查,也不会插入新元素。你只是有未定义的行为。
所以,更详细地说:
- 使用索引大于向量大小的索引运算符,不会增加向量的大小并添加新元素。
- 使用大于向量大小的越界索引将简单地访问不属于向量的内存位置。
- 读取这样的位置通常会给出一个随机值或更好的设置,一个未定义的值。这通常不会损害您的程序,除非您返回未定义的值。
- 写入越界值通常是一个非常严重的问题,因为您正在覆盖您没有赢得的内存。非常危险。
如果要进行边界检查,请在-function处使用向量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句