# Bug 修复报告 根据 `BUG_REPORT.md` 中的“是否修复”指示,本次完成了所有标记为“按建议修改/按建议修复”的项;标记为“暂不修复/暂不修改/暂不处理”的项保持原样未改动。 --- ## 修复状态汇总 | 编号 | 标题 | 指示 | 状态 | |---|---|---|---| | BUG-01 | 基类无虚析构函数 | 暂不修复 | 未修改 | | BUG-02 | Hight_smooth 无限增长 | 暂不修复 | 未修改 | | BUG-03 | 工厂单例非线程安全 | 暂不修复 | 未修改 | | BUG-04 | TAS Point_Sum 未限幅 | 按建议修复 | ✅ 已修复 | | BUG-05 | Track_to_start.size()-1 下溢 | 按建议修复 | ✅ 已修复 | | BUG-06 | track_start_point_num 未校验 | 按建议修复 | ✅ 已修复 | | BUG-07 | 禁止区域个数未限制 | 暂不修复 | 未修改 | | BUG-08 | 消亡航迹输出无容量检查 | 暂不修改 | 未修改 | | BUG-09 | Beam_Ctrl 输出计数越界风险 | 按建议修改 | ✅ 已修复 | | BUG-10 | 航迹号数组下标未校验 | 按建议修改 | ✅ 已修复 | | BUG-11 | TAS model_filter 未初始化变量 | 按建议修改 | ✅ 已修复 | | BUG-12 | tas_beam_output 未初始化变量 | 按建议修改 | ✅ 已修复 | | BUG-13 | Work_Parameter 未初始化 | 暂不修复 | 未修改 | | BUG-14 | lastest_index 未初始化 | 按建议修改 | ✅ 已修复 | | BUG-15 | TWS delta_T<=0 仍关联 | 按建议修改 | ✅ 已修复 | | BUG-16 | TAS 无 delta_T>0 检查 | 按建议修改 | ✅ 已修复 | | BUG-17 | TAS 外推负时间差 | 按建议修改 | ✅ 已修复 | | BUG-18 | 卡尔曼时间差除零 | 暂不修改 | 未修改 | | BUG-19 | Bind_speed prt=0 除零 | 按建议修改 | ✅ 已修复 | | BUG-20 | 门限重复平方 | 暂不修改 | 未修改 | | BUG-21 | 近程模型 3 门限整数除法 | 按建议修改 | ✅ 已修复 | | BUG-22 | EKF/凝聚方位角未环绕 | 按建议修改 | ✅ 已修复 | | BUG-23 | IMM 概率零分母/奇异矩阵 | 按建议修改 | ✅ 已修复 | | BUG-24 | EKF 似然只取 2x2 S | 按建议修改 | ✅ 已修复 | | BUG-25 | TWS 处理 TAS 航迹 | 暂不处理 | 未修改 | | BUG-26 | 输出航向角使用 atan | 按建议修改 | ✅ 已修复 | | BUG-27 | asin(height/range) 未保护 | 按建议修改 | ✅ 已修复 | | BUG-28 | track_clear_all 清理不彻底 | 按建议修改 | ✅ 已修复 | | BUG-29 | tracking_stop 队列延迟 | 暂不修改 | 未修改 | | BUG-30 | work_mode 注释不一致 | 注释有误 | ✅ 已修复注释 | | BUG-31 | tracking_point/引导跟踪空实现 | 注释明确 | ✅ 已加注释 | | BUG-32 | 凝聚内层未跳过已用点 | 按建议修改 | ✅ 已修复 | | BUG-33 | 起批 delta_T 未校验 | 暂不修改 | 未修改 | | BUG-34 | tmp_track_die 空向量越界 | 按建议修改 | ✅ 已修复 | | BUG-35 | 航迹号 500 不复用 | 按建议修改 | ✅ 已修复 | | BUG-36 | TAS 波束关闭字段未清 | 暂不修改 | 未修改 | | BUG-37 | 局部结构体未完整初始化 | 按建议修改 | ✅ 已修复 | --- ## 已修复项明细 ### BUG-04 - 文件:`data_process.cpp` - 修改:TAS 分支 `data_num = min(max(Point_Sum,0), 150)`,避免 `Point_Sum > 150` 时越界读取输入数组。 ### BUG-05 - 文件:`track_init.cpp` - 修改:重复航迹去重循环改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`,避免空容器时 `size()-1` 下溢。 ### BUG-06 - 文件:`data_process.cpp`、`track_init.cpp`、`track_init_direct_tracking.cpp` - 修改: - `track_process_parameters_initial/modify` 校验 `3 <= track_start_point_num <= 9`,非法参数返回 `-1`。 - 起批转可靠航迹前增加 `Track_to_start.empty()` 和每条航迹 `size() >= 3` 防御。 - 直接跟踪的 `tmp_track_to_trust_track` 也增加 `L >= 3` 保护。 ### BUG-09 - 文件:`tas_ctrl.cpp` - 修改: - `tas_ctrl_process` 开始时校验 `Trust_track_num_Output` 非空并清零。 - `tas_target_add` 写入输出数组前检查 `*Trust_track_num_Output < MAX_TRACK_NUM`。 ### BUG-10 - 文件:`track_index_mangement.cpp` - 修改:写入 `List[]` 前校验 `Track_Index` 在 `[1, MAX_TRACK_INDEX]`。 ### BUG-11 - 文件:`track_asso_tas.cpp` - 修改:`model_filter` 增加 `found_tas_track` 标记;找不到目标时直接返回,局部变量均初始化。 ### BUG-12 - 文件:`tas_ctrl.cpp` - 修改:`tas_beam_output` 初始化 `H_track/X_now/CPI_time`,找不到目标时 `open_flag=0` 并返回。 ### BUG-14 - 文件:`track_index_mangement.h` - 修改:`lastest_index` 声明时初始化为 `0`。 ### BUG-15 - 文件:`track_asso.cpp` - 修改:TWS 关联中 `delta_T <= 0` 时从候选列表移除该无效配对并 `continue`,不再标记点迹已使用、不刷新航迹状态。 ### BUG-16 - 文件:`track_asso_tas.cpp` - 修改:TAS 关联点循环中 `delta_T <= 0` 时跳过该点。 ### BUG-17 - 文件:`track_asso_tas.cpp` - 修改:TAS 外推时 `delta_T <= 0` 直接跳过,避免航迹时间回退和负时间预测。 ### BUG-19 - 文件:`kalman.cpp`、`data_process_class_dll.h` - 修改:`Bind_speed` 对 `prt <= 0` 或 `freq <= 0` 返回安全非零值;接口注释改为“PRI 不允许为 0”。 ### BUG-21 - 文件:`track_asso.cpp` - 修改:近程门限中 `/1000`、`/100` 改为浮点除法,避免整数除零恒不成立;保留 `d*d` 比较方式(未修改 BUG-20)。 ### BUG-22 - 文件:`kalman.cpp`、`dot_coh.cpp`、`dot_coh_tas.cpp` - 修改: - 新增 `wrapAnglePi()`,EKF 各残差计算后对方位角分量做 `[-π,π]` 环绕。 - 点迹凝聚 `work_mode==0` 分支和 TAS 凝聚统一使用最小角度差 `delta_F`。 ### BUG-23 - 文件:`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp` - 修改: - IMM 交互中 `c[0..2]` 为 0/负时钳位到 `1e-12`。 - 模型概率更新增加分母保护,分母异常时保持上一拍概率。 - 似然计算对 `det_S <= 0` 返回 0,避免 NaN。 ### BUG-24 - 文件:`kalman.h`、`kalman.cpp`、`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp` - 修改: - `kalman_filter_EKF` 的 `S_filter` 由 `[2][2]` 改为 `[3][3]`。 - 调用侧使用 `Matrix3f` 和 3x3 行列式,似然归一化改为 `1/sqrt(pow(2*PI,3)*detS)`。 ### BUG-26 - 文件:`track_asso.cpp`、`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp` - 修改:航向角改用 `atan2(X[4], X[1])` 并归一化到 `[0,2π)`。 ### BUG-27 - 文件:`track_asso_tas.cpp`、`track_asso_direct_tracking.cpp`、`track_init.cpp` - 修改:计算 `asin` 前对 `height/range` 做定义域钳位,`range <= 0` 时按 0 处理。 ### BUG-28 - 文件:`data_process.cpp`、`dot_coh.h/cpp`、`track_asso.h/cpp`、`track_asso_tas.h/cpp`、`track_init.h/cpp`、`tas_ctrl.h/cpp`、`track_index_mangement.h/cpp` - 修改: - 为 `Dot_Coh`、`Track_Asso`、`Track_Asso_Tas`、`Track_Init`、`TAS_Ctrl`、`Track_Ind_Mangement` 增加 `reset()`。 - `track_clear_all()` 调用上述 reset,并恢复 `last_beam_num = INT_MAX`。 - 直接跟踪相关类也补充了 `reset()`。 ### BUG-30 - 文件:`data_process_class_dll.h` - 修改:`work_mode` 注释由“0进程 1中程 3远程”改为“0进程 1中程 2远程”。 ### BUG-31 - 文件:`data_process_class_dll.h`、`data_process.cpp`、`track_init_direct_tracking.cpp` - 修改:在 `direct_tracking_process`、`tracking_point`、直接跟踪入口处注释明确“当前接口未启用,保留空实现”。 ### BUG-32 - 文件:`dot_coh.cpp`、`dot_coh_tas.cpp` - 修改:内层凝聚比较增加对 `i` 点 `Use_Flag` 的检查,已使用点不再参与凝聚。 ### BUG-34 - 文件:`track_init.cpp`、`track_init_direct_tracking.cpp` - 修改:`tmp_track_die` 先判断 `n <= 0`,空向量直接删除。 ### BUG-35 - 文件:`track_index_mangement.cpp` - 修改:两处回绕循环由 `i < MAX_TRACK_INDEX` 改为 `i <= MAX_TRACK_INDEX`,使 500 号可复用。 ### BUG-37 - 文件:`track_init.cpp`、`track_init_direct_tracking.cpp` - 修改:`Temp_track`、`Trust_Track` 局部变量改为 `= {}` 值初始化,避免未初始化字段。 --- ## 编译与运行验证 使用 **MSVC 2013 (Visual Studio 12) x86** 实际编译: | 配置 | 结果 | |---|---| | X256_PS Release | ✅ 编译链接通过 | | X256_MS Release | ✅ 编译链接通过 | | X256_PS Debug | ✅ 编译链接通过 | | MSVC `/W4` Release | ✅ 编译通过,未再出现 C4700/C4701 未初始化变量告警 | 另编写临时宿主程序验证 DLL: - 初始化 `RadarPara`,调用 `track_process_parameters_initial` 成功。 - 调用 `track_process`,返回 `1`,输出计数正常。 - 工厂创建/销毁流程正常。 > 说明:当前构建仍会输出原有代码的 C4244 转换告警、C4018 有符号/无符号比较告警、C4819 编码告警,均非本次修复引入,不影响链接和运行。