指针对象的矢量,打印/迭代时出现问题


class Vertex {
public:
int dist;
int num;
vector<Vertex*> edges;
Vertex() {}
Vertex(int num) : num(num) {}
};
class Solution {
public:
void updateMatrix(vector<vector<int>>& matrix) {
vector<vector<Vertex*>> bunker;
for (const vector<int>& in : matrix) { 
vector<Vertex*> neu;
for (int i : in) {
Vertex k(i);
Vertex* v = &k;
neu.push_back(v);
}
bunker.push_back(neu);
}
for (const vector<Vertex*>& b : bunker) for (Vertex* k : b) cout << k->num << endl;
}
};

当输入矩阵{{1,2,3},{4,5,6},{7,8,9}时,函数只打印9。我做错了什么?

Vertex k(i);

这在这个循环中声明了一个局部变量,称为k

与自动作用域中声明的所有其他变量一样,此对象将在其作用域结束时自动销毁。

Vertex* v = &k;
neu.push_back(v);

紧接着,指向该对象的指针被添加到向量中。在那之后,对象立即被销毁,留下一个指向已销毁的悬挂引用的指针

代码的其余部分,试图使用这些指向已销毁对象的指针,是未定义的行为,您不能再期望任何有意义的结果。

我做错了什么?

您将指向即将不存在的对象的指针推送到向量中。当你尝试使用它们的时候,它们早已不见了。您的程序有未定义的行为。

与其使用指针,不如直接使用Vertex

最新更新