我宣布了一个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
答案 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
的指针。