2016-07-26 11 views
-3

ich eine Struktur treenode erklärteI einfügen struct Vektor, aber Adresse aller Elemente des Vektors sind gleiche

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

und einen Vektor

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

jetzt ich einen Vektor tv erstellen möchten speichern der Wert von 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); 
    } 

aber wenn I den Wert tv drucken, fand ich das ganze Element des TV gleich sind (gleiche Adresse), gibt ar e 9. I`m verwirrt, habe ich eine neue treenode, jede Iteration erstellen, warum alle das Element enter image description here

Antwort

4

Sie haben einen Vektor von dangling pointers gleiche Adresse verwenden. speichern sie nur von Wert

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); 
} 

Sie Ansonsten halten Zeiger auf eine temporäre Variable mid zurückzudrängen, die zwischen Iterationen den Gültigkeitsbereich fällt.