如何访问win7下做的网站,可以放友情链接的网站,零基础学网页设计,网站建设规划书中的技术可行性不包括文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充#xff1a;类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象#xff1a;在lane_info-lane().success… 文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象在lane_info-lane().successor_id_size()或lane_info-lane().successor_id().size()为1的情况下通过for循环去访问lane_info-lane().successor_id()的时候出现了coredump
2. 问题描述 1 问题必现问题现象自相矛盾。size为1但是却无法访问按理来说如果可迭代对象使用for循环访问为空的情况是不会出问题的for循环就跳过了 2 类Lane_info的结构其中Lane是protobuf结构如下 class LaneInfo {const Lane lane_; // 所包含的lane的信息, 居然定义的是引用{id_;length_;type_;turn_;successor_ids_;predecessor_ids_;…};points;unit_directions_;segments_;total_length_;road_id;…
};3. 问题分析
1怀疑Lane的proto实例创建时add_successor_id没有添加成功 检查发现添加方式没有问题从地图收到的successor_id也不为空正常填写的 2怀疑LaneInfo实例没有创建成功 添加打印发现LaneInfo创建过程未出现失败 3怀疑是智能指针引用问题 std::shared_ptr指针指向内容被异常释放检查下来也没发现 4怀疑是引用的原变量已经不在了仍然尝试去访问 检查发现就是这个原因。LaneInfo类中的lane_引用很关键
4. 问题根因
满足地图更新条件时上一次的map_结果会被清理智能指针管理但是目标上一帧的current_lanes类型是LaneInfo仍去索引lane_信息问题发生过程 1 第一次地图更新时创建了static_map_-hdmap_-{map_, lanes_}的关联关系。其中lanes_结构lane_id, LaneInfo2目标第一帧的current_lanes根据static_map_记录了当时的lane_id, LaneInfo信息且由于是proto结构LaneInfo中copy了lane_的信息对应的proto字段bit均已赋值比如has_successor_id字段、succcessor_id_size字段等本次访问没问题3第二次更新地图时static_map_关联到了新的hdmap_即static_map_-new_hdmap_-{map_, lanes_}的关联关系此时lanes信息已完全变更4目标第二帧再去访问第一帧的current_lanes_发现lane proto的successor_id_size有效但是去访问successor_id的时候却找不到原变量因此失败。即被引用对象已被删除
5. 问题修复
1static_map_全程只关联一个hdmap_每次地图更新也只更新该hdmap_。这里的static_map_是一个伪静态类2static_map_-hdmap-{map_, lanes_}中的lanes_不做清理避免重复构建相同lane的LaneInfo也避免在查询目标前后继车道的过程中出现异常如目标已记录的successor_id在已更新的地图lanes_中却找不到
6. 补充类成员变量定义为引用类型
1C初始化包括声明时即定义或者在初始化列表中进行初始化。构造函数分为初始化列表和函数体2C类成员变量定义为引用类型不能用默认函数初始化必须定义构造函数来初始化引用成员变量否则会报引用未初始化错误3构造函数的形参也必须是引用类型如LaneInfo(const Lane lane) : lane_(lane) {} 防止引用绑定内存错误在构造函数结束后所指向内存生命周期已结束会有问题4不能在构造函数里初始化必须在初始化列表中进行初始化5初始化后的引用变量所占用的内存空间和普通变量相同可通过类的大小进行测试 【参考文章】 [1]. c之类内定义引用成员 [2]. 引用变量所占用的内存空间 [3]. C类成员变量定义为引用
created by shuaixio, 2024.02.18