# BUG-20260409-0002 > 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。 ## 基本信息 - ID: BUG-20260409-0002 - 标题: 基础控件生命周期与边界条件问题 - 状态:已修复 / 待持续回归 - 严重性:S2 - 优先级:P1 - 模块:Control / Window / Table / Label / Button / TextBox / MessageBox - 版本 / 分支:`master` - 环境:Windows + EasyX + VS2022 - 发现人:静态审查 - 关联 Fix ID:Fix-BUG-20260409-0002 ## 问题描述 - 现象: - `Window` 析构时可能先关闭图形环境,再让控件析构访问绘图接口。 - `Table` 在空表头、空数据、列数不一致时存在越界或空状态问题。 - `Label::setText()` 后尺寸与背景快照不能及时同步。 - `MessageBox` 外层曾直接干预 `Dialog` 初始化流程。 - 一些资源所有权和析构职责不够清晰。 - 影响范围: - 基础稳定性 - 边界输入正确性 - 维护成本 - 期望结果: - 生命周期安全、边界输入可防御、接口语义清晰 - 实际结果: - 存在潜在崩溃、越界、状态不一致和维护负担 ## 复现信息 - 前置条件:特定表格输入、动态修改文本、窗口关闭、MessageBox 使用链 - 复现步骤: 1. 静态审查相关代码路径。 2. 构造空表头、长于表头的数据行、动态变更 Label 文本。 3. 观察关闭窗口或销毁相关对象时的析构顺序。 - 复现概率:高概率 / 必现(不同问题不同) - 最小复现 Demo:[可选] - 证据:静态分析、日志、编译验证 ## 初步分析 - 疑似位置: - `Window::~Window` - `Control` 析构与背景快照恢复链 - `Table::initTextWaH / setData / drawHeader / drawTable` - `Label::setText` - `MessageBox::showAsync / showModal` - 触发条件: - 边界数据输入 - 动态文本变化 - 对象销毁 / 窗口关闭 - 相关线索: - 所有权层次混乱 - 空状态防御不足 - 接口暴露超出真实职责 ## 跟踪信息 - 首次发现时间:本轮协作初期 - 最后更新时间:2026-04-09 - 修复版本:[当前工作区] - 验证版本:[当前工作区] - 备注:字符集相关问题暂未处理,仍按 MBCS 假设工作