我只是不知道如何更好地描述这个问题。我有以下代码(我写了
using namespace std
来简化它):
#include <iostream>
#include <vector>
using namespace std;
struct Vertex
{
int num;
Vertex* path;
};
int main()
{
vector<Vertex> vertexes{};
for (int i = 0; i < 2; i++)
{
vertexes.push_back({ i + 1, nullptr });
vertexes[i].path = &vertexes[i];
cout << vertexes[i].num << ": " << vertexes[i].path->num << endl;
}
cout << endl;
for (Vertex& vertex : vertexes)
{
cout << vertex.num << ": " << vertex.path->num << endl;
}
return 0;
}
在线编译器输出:
1: 1
2: 2
1: 1579877676
2: 2
我做错了什么以及第一个指针在哪里变得无效?
https://en.cppreference.com/w/cpp/container/vector/push_back
如果操作后新的 size() 大于旧的capacity(),则会发生重新分配,在这种情况下,所有迭代器(包括 end() 迭代器)和对元素的所有引用都将无效。
您的代码不会检查是否发生这种情况,但它很可能发生在第二个
push_back
上,在这种情况下,指向vertexes[0]
的指针(迭代器)可能会失效。