diff --git a/includes/memhub.vp b/includes/memhub.vp index 1745e31..cdd28b4 100644 --- a/includes/memhub.vp +++ b/includes/memhub.vp @@ -478,6 +478,12 @@ class MemBuddy(MemManager): if order < 0 or order > self.max_order: continue self._coalesce(block, order) + # [DET] reset-aware:记录表与 chk 栈等长(每次 alloc 各追加一条, + # free 只置标志不删),截断 chk_depth 必须同步截断 _det_count, + # 否则 reset 后旧记录仍标 active → 下一轮 alloc 复用同一块被 + # 误报为"分配重叠/越界写"(SlotsBugTest 7B buf + 72B Token 误报根因)。 + if self.detection != 0 and self._det_records is not None: + self._det_count = mark self._unlock() def reset_all(self): @@ -785,6 +791,10 @@ class MemBuddy(MemManager): if self.usable is None: return 0 self._rebuild_free_lists() + # [DET] reset 重建全部 free list = 全部块释放:记录表同步清空, + # 防止后续 alloc 复用旧块被误报(与 reset_to 截断同因)。 + if self.detection != 0 and self._det_records is not None: + self._det_count = 0 return 1 # realloc override: buddy system reads original order from block header; old_size is not required