2016-07-26 30 views
-3

我宣布一个结构树节点我插入结构来矢量,但矢量的所有元素的地址是相同的

struct treenode { 
    int val; 
    treenode *l; 
    treenode *r; 
}; 

和矢量

vector<int> v = { 1,2,3,4,5,6,7,8,9 }; 

现在我想创建一个矢量电视存储v

vector<treenode* > tv; 
for (int i = 0; i < v.size(); i++) 
    { 
     treenode mid; 
     mid.val = v[i]; 
     mid.l = NULL; 
     mid.r = NULL; 
     tv.push_back(&mid); 
    } 

的价值,但是当我打印电视的价值,我发现电视的所有元素都是相同的(同一地址),还有AR e 9.我很困惑,我已经创建了一个新的treenode每次迭代,为什么所有的元素使用相同的地址 enter image description here

回答

4

你有一个向量dangling pointers。按值

vector<treenode> tv; 
for (int i = 0; i < v.size(); i++) 
{ 
    treenode mid; 
    mid.val = v[i]; 
    mid.l = NULL; 
    mid.r = NULL; 
    tv.push_back(mid); 
} 

否则你继续推回指针到掉出来的迭代之间范围的临时变量mid只是将它们存储。