我正在尝试将对象的指针添加到像这样的函数中的向量:
矢量:
vector<struct Node*> vars;
功能:
void fill_vec(){
struct Node* temp;
temp = new Node();
cout << token << endl;
temp->name = token;
temp->value = 0;
cout << temp << endl;
vars.push_back(temp);
}
fill_vec在while循环中被调用,当不再有变量名时停止。
它向向量添加了正确数量的节点,但所有节点都指向同一个对象。正在解析令牌。
上面的输出:
a
0x9c6010
b
0x9c6050
打印矢量:
void print_vars(){
for(int i = 0; i < vars.size(); i++){
cout << "Name:" << vars[i]->name << endl;
cout << "Value:" << vars[i]->value << endl;
}
}
输出:
Name:b
Value:0
Name:b
Value:0
我的想法是,当我分配新内存时,地址会改变。每当我调用函数时打印temp的地址,地址都是相同的。我打印地址错了。每次调用函数的地址都不同。提前感谢您的帮助。
答案 0 :(得分:0)
我的想法是,当我分配新内存时,地址会改变。
确实如此。
每当我调用函数时打印temp的地址,地址都是一样的。
这是因为您正在打印出局部变量的地址,每次调用fill_vec()
时,该地址变量恰好位于相同的堆栈内存地址中。您应该打印出已分配的Node
的内存地址。
更改此行:
cout << &temp << endl;
对此:
cout << temp << endl;
答案 1 :(得分:0)
事实证明,这是令牌。令牌是char *,我没有使用strdup()。所以每次更新令牌时,每个对象的名称都会被更改。