monkeykind_ 2024-05-30 09:38 采纳率: 33.3%
浏览 19

QList在添加结构体时出现随机值

QList在添加结构体时出现随机值

最近在一个项目中遇到了这样一个问题,然后自己做了一下验证,没搞明白是什么原因造成的,有朋友能解释下吗?

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-05-30 09:38
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据提供的代码截图和描述,问题出现在使用 QListQVector 来存储 CarInfo 结构体对象时,成员变量 poscarNumber 出现了随机值。这通常是由几个原因造成的:

    1. 未初始化:如果 CarInfo 结构体没有默认构造函数来初始化成员变量,那么这些变量将包含垃圾值(即未定义的随机值)。

    2. 内存分配问题:如果 QListQVector 在内部分配内存时出现问题,可能会导致数据损坏。

    3. 并发访问:如果多个线程同时访问和修改 QListQVector,而没有适当的同步机制,可能会导致数据不一致。

    4. 编译器优化:在某些情况下,编译器优化可能会导致变量初始化被省略。

    为了解决这个问题,你可以尝试以下步骤:

    确保结构体正确初始化

    CarInfo 结构体中添加一个构造函数来初始化成员变量:

    struct CarInfo {
        qint32 pos;
        qint32 carNumber;
    
        // 默认构造函数
        CarInfo() : pos(0), carNumber(0) {}
    };
    

    使用初始化列表

    在向 QListQVector 添加 CarInfo 对象时,使用初始化列表来初始化对象:

    QList<CarInfo> cars;
    cars.append({-1848557840, 484}); // 明确初始化pos和carNumber
    

    检查并发访问

    如果你的应用程序是多线程的,请确保对 QListQVector 的访问是线程安全的。使用互斥锁或其他同步机制来避免竞态条件。

    禁用优化

    如果怀疑是编译器优化导致的问题,可以尝试禁用优化。在编译时添加 -O0 选项(对于GCC和Clang)。

    参考资料

    示例代码

    这里是一个简单的示例,展示如何使用 QList 和初始化列表:

    #include <QCoreApplication>
    #include <QList>
    #include <QVector>
    
    struct CarInfo {
        qint32 pos;
        qint32 carNumber;
    
        CarInfo() : pos(0), carNumber(0) {} // 默认构造函数
    };
    
    int main(int argc, char *argv[]) {
        QCoreApplication a(argc, argv);
    
        QList<CarInfo> cars;
        cars.append({-1848557840, 484});
        cars.append({-1848558800, 484});
    
        QVector<CarInfo> cars_V;
        cars_V.append({0, 100});
        cars_V.append({1, 101});
    
        return a.exec();
    }
    

    请注意,你需要根据你的项目需求调整上述代码。希望这些信息能帮助你解决问题。如果问题仍然存在,可能需要更详细的调试来确定问题的根本原因。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月30日

悬赏问题

  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包