STL中关于vector的一点有趣的事情

PLZ ADD SOURCE: http://www.cnblogs.com/xdxer/p/4072056.htmlhtml

今日饭后,一哥发给我一段代码,让我看看会不会有什么问题。ios

#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main() {

    vector<string> v;

    v.push_back("Hello");

    string& x = v[0];

    v.push_back("world");

    cout<<x;

    return 0;
}

事实上我第一眼并无看出什么,可是实际上vector是进行了resize 由于以前没有指定vector的大小。安全

 

v.push_back("world");以前,咱们能够看到:spa

image

v.push_back("world");以后,咱们发现v所指向的内容的地址发生了改变,并且 _Last – _First 变成了 0x20 扩大了一倍,因此我判定是vector 运行了resize 进行了内存的从新分配。code

@`NHG(4I7FZW`TN0~537{9R

 

让咱们再来看看内存方面: 其中 0x 00 63 2f 51 是char *的值。htm

image

 

 

v.push_back("world"); 以后,该段内存被释放,而且C++还作了一件事,就是对此块内存区域进行了擦除,使用0xFE进行填充,也许是为了安全性的方面考虑吧。blog

image

 

总结一句话:写程序要必定要进行深刻的考虑,BUG就在你意想不到的地方。内存

相关文章
相关标签/搜索