我将struct插入到vector中,但vector的所有元素的地址都是相同的

时间:2016-07-26 17:33:35

标签: c++ vector struct

我宣布了一个struct treenode

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

和矢量

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

现在我想创建一个矢量tv来存储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);
    }

但是当我打印tv的值时,我发现tv的所有元素都是相同的(相同的地址),有9个。我很困惑,我每次迭代都创建了一个新的treenode,为什么所有元素都使用相同的地址 enter image description here

1 个答案:

答案 0 :(得分: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的指针。