【发布时间】:2020-03-17 09:26:54
【问题描述】:
我做如下测试,创建一个vector并将它的容量设置为1,然后使用v[100]=100;直接分配v[100]却不触发core dump,为什么?vector v应该没有足够的内存访问v[100],但是v[100]被成功赋值为100,而size和capacity()都保持为0和1,这怎么理解?
int main(){
std::vector<int> v;
v.reserve(1);
v[100]=100; //here does't triggle core dump, wired
std::cout<<v.size()<<std::endl; //0
std::cout<<v.capacity()<<std::endl; //1
std::cout<<v[100]<<std::endl; //100
return 0;
}
【问题讨论】:
-
这是未定义的行为,它的工作纯粹是运气。如果您访问无效内存,程序不需要崩溃。引用cppreference:“与 std::map::operator[] 不同,此运算符从不向容器中插入新元素。通过此运算符访问不存在的元素是未定义的行为。”跨度>