STL vector使用不当导致内存错误

结论优先

如果在vector push back过程中出现引用元素的情况,可能导致内存问题。

1
2
3
4
5
6
7
string s("abc");
for (int i=0; i < 100; i++) {
vs.push_back(s);
cout<< "vector_size:" << vs.size() << " vector_cap:" << vs.capacity() << " vs[0].c_str:=" << (void*)vs[0].c_str() << endl;
}
}

会发现(void*)vs[0].c_str()的地址会发生变化,在capacity为8、16、32、64的时候,会变化,因为vector在push新元素的时候,会resize,拷贝原有数据到新申请的地址,释放掉原有地址。

同时对list和map做了测试,不会出现重新分配内存的情况。

此种情况在ubuntu14上不会出现,ubuntu16上稳定出现,说明两个系统的系统库实现方式有区别。

本文标题:STL vector使用不当导致内存错误

文章作者:Louis

发布时间:2018年01月05日 - 16:01

最后更新:2018年01月05日 - 16:01

原始链接:/2018/01/05/stl-vector/

许可协议: Louis-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。