向对象添加指向对象的指针

时间:2015-11-22 04:36:56

标签: c++ pointers vector struct

我正在尝试将对象的指针添加到像这样的函数中的向量:

矢量:

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的地址,地址都是相同的。我打印地址错了。每次调用函数的地址都不同。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

  

我的想法是,当我分配新内存时,地址会改变。

确实如此。

  

每当我调用函数时打印temp的地址,地址都是一样的。

这是因为您正在打印出局部变量的地址,每次调用fill_vec()时,该地址变量恰好位于相同的堆栈内存地址中。您应该打印出已分配的Node的内存地址。

更改此行:

cout << &temp << endl;

对此:

cout << temp << endl;

答案 1 :(得分:0)

事实证明,这是令牌。令牌是char *,我没有使用strdup()。所以每次更新令牌时,每个对象的名称都会被更改。