指向向量中对象的指针有时指向向量中的其他对象

BUR

在下面的代码中,Struct2中的Struct1指针应始终指向Struct1的某个对象。这些结构的每一个都包含在一个向量中。

但是,当我输出Struct2对象中指向的Struct1对象的索引变量时,在某些情况下会返回错误的对象。

为什么指向向量中包含的对象的指针有时指向向量中的另一个对象?

struct Struct1
{
    size_t index;
    std::vector<size_t> data;
}

struct Struct2
{
    Struct1 *s1;
}

class MyClass
{
    std::vector<Struct1> s1s;
    std::vector<Struct2> s2s;
    size_t propIndex = 0;

    void input(QByteArray &line)
    {
        if (line == "1") {
            for (size_t i = s1s.size(); i <= propIndex; i++) {
                s1s.push_back({ .index = i, .data= {} });
            }
            QByteArrayList list = getList();
            for (auto id : list)  s1s.at(propIndex).data.push_back(id.toULongLong());
        }
        else {
            if (propIndex == s2s.size()) {
                s2s.push_back({ .s1 = nullptr });
            }

            if (line == "2") {
                size_t index = getIndex();
                for (size_t i = s1s.size(); i <= index; i++) {
                    s1s.push_back({ .index = i, .data= {} });
                }
                s2s.at(propIndex).s1 = &s1s.at(index);
            }
        }

        propIndex++;
    }

    QByteArrayList output()
    {
        QByteArrayList output;

        for (auto s2 : s2s) {
            output += QByteArray::number(s2.s1->index) + "\n";
        }

        return output;
    }
}
克里斯多夫

问题是您将指针指向向量中的项目:

s2s.at(propIndex).s1 = &s1s.at(index);

向量是一个动态结构,并且当它生长其数据可以被重新分配。因此,任何push_back()可能会使所有指针失效:

s1s.push_back({ .index = i, .data= {} });

请注意,向量分配算法旨在在需要增长时为几个元素保留空间。这说明该问题仅偶尔出现。

一种解决方案是不保留指针,而保留元素的索引以及指向向量的指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找并返回指向向量中对象的指针

来自分类Dev

指向类对象的指针的向量

来自分类Dev

指向对象的指针向量C ++

来自分类Dev

排序后指向向量中对象的指针(C++)

来自分类Dev

如何保持指向插入到集合中然后推入向量中的对象的指针?

来自分类Dev

如何访问指向其他向量的指针向量?我在 C++ 中尝试了hackerrank程序可变大小的数组:

来自分类Dev

指向删除并指向其他对象时,C ++中的Seg Faulting Pointers

来自分类Dev

指向函数中向量的向量的指针给出“表达式必须具有指针类型”错误

来自分类Dev

返回指向Django中其他对象的对象

来自分类Dev

C++ 指针的新手;试图从指向父类的指针的向量中检索子对象。帮助将不胜感激

来自分类Dev

清除指向唯一指针拥有的对象的原始指针的向量

来自分类Dev

当我们在C中声明静态向量时,是否存储了指向该向量的指针?

来自分类Dev

指向可能不存在的对象的指针向量

来自分类Dev

使用指向对象 C++ 的指针对向量进行排序

来自分类Dev

如何在Django中过滤没有其他指向它们的对象的对象?

来自分类Dev

更改对象的“ this”指针以指向其他对象

来自分类Dev

为什么推力::设备向量似乎没有机会保存指向其他设备向量的原始指针?

来自分类Dev

为什么指向类对象的指针的静态向量具有垃圾值?

来自分类Dev

根据对象指针在向量中获取对象

来自分类Dev

在 BeginThread 方法中传递指向对象的指针

来自分类Dev

指向C ++中对象属性的指针

来自分类Dev

指向在参数中创建的对象的指针

来自分类Dev

检查指向矢量C ++中对象的指针

来自分类Dev

指向C ++中对象数组的指针

来自分类Dev

如何从文件中读取指向对象的指针?

来自分类Dev

在 Rust 中创建可变 Trait 对象(有时是共享的)的向量

来自分类Dev

访问包含在指向该类的指针的向量中的类的方法

来自分类Dev

在回调中投射指向向量类型的指针

来自分类Dev

指向指针向量的指针数组

Related 相关文章

  1. 1

    查找并返回指向向量中对象的指针

  2. 2

    指向类对象的指针的向量

  3. 3

    指向对象的指针向量C ++

  4. 4

    排序后指向向量中对象的指针(C++)

  5. 5

    如何保持指向插入到集合中然后推入向量中的对象的指针?

  6. 6

    如何访问指向其他向量的指针向量?我在 C++ 中尝试了hackerrank程序可变大小的数组:

  7. 7

    指向删除并指向其他对象时,C ++中的Seg Faulting Pointers

  8. 8

    指向函数中向量的向量的指针给出“表达式必须具有指针类型”错误

  9. 9

    返回指向Django中其他对象的对象

  10. 10

    C++ 指针的新手;试图从指向父类的指针的向量中检索子对象。帮助将不胜感激

  11. 11

    清除指向唯一指针拥有的对象的原始指针的向量

  12. 12

    当我们在C中声明静态向量时,是否存储了指向该向量的指针?

  13. 13

    指向可能不存在的对象的指针向量

  14. 14

    使用指向对象 C++ 的指针对向量进行排序

  15. 15

    如何在Django中过滤没有其他指向它们的对象的对象?

  16. 16

    更改对象的“ this”指针以指向其他对象

  17. 17

    为什么推力::设备向量似乎没有机会保存指向其他设备向量的原始指针?

  18. 18

    为什么指向类对象的指针的静态向量具有垃圾值?

  19. 19

    根据对象指针在向量中获取对象

  20. 20

    在 BeginThread 方法中传递指向对象的指针

  21. 21

    指向C ++中对象属性的指针

  22. 22

    指向在参数中创建的对象的指针

  23. 23

    检查指向矢量C ++中对象的指针

  24. 24

    指向C ++中对象数组的指针

  25. 25

    如何从文件中读取指向对象的指针?

  26. 26

    在 Rust 中创建可变 Trait 对象(有时是共享的)的向量

  27. 27

    访问包含在指向该类的指针的向量中的类的方法

  28. 28

    在回调中投射指向向量类型的指针

  29. 29

    指向指针向量的指针数组

热门标签

归档