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

Adding pointers to objects to a vector

本文关键字:指针 对象 添加      更新时间:2023-10-16

我正试图在这样的函数中向向量添加指向对象的指针:

矢量:

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()。所以每次我更新令牌时,每个对象的名称都会发生变化。