尝试将指针分配给结构成员时,结构的奇怪 std::vector 行为

问题描述 投票:0回答:1

我只是不知道如何更好地描述这个问题。我有以下代码(我写了

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

我做错了什么以及第一个指针在哪里变得无效?

c++ pointers vector
1个回答
0
投票

https://en.cppreference.com/w/cpp/container/vector/push_back

如果操作后新的 size() 大于旧的capacity(),则会发生重新分配,在这种情况下,所有迭代器(包括 end() 迭代器)和对元素的所有引用都将无效。

您的代码不会检查是否发生这种情况,但它很可能发生在第二个

push_back
上,在这种情况下,指向
vertexes[0]
的指针(迭代器)可能会失效。

© www.soinside.com 2019 - 2024. All rights reserved.