# 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 假设工作
