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就在你意想不到的地方。內存

相關文章
相關標籤/搜索