向矢量添加指向对象的指针
Adding pointers to objects to a vector
我正试图在这样的函数中向向量添加指向对象的指针:
矢量:
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的地址时,地址是相同的。我把地址打印错了。函数的每个调用的地址都不同。提前感谢您的帮助。
我的想法是,当我分配新的内存时,地址会改变。
的确如此。
每次调用函数时,当我打印temp的地址时,地址是相同的。
这是因为您要打印出一个局部变量的地址,每次调用fill_vec()
时,该变量恰好位于同一堆栈内存地址。您应该打印出已分配的Node
的内存地址。
更改此行:
cout << &temp << endl;
对此:
cout << temp << endl;
事实证明,这就是令牌。令牌是一个char*,我没有在上面使用strdup()。所以每次我更新令牌时,每个对象的名称都会发生变化。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它