You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

B树插入函数报错:vector subscript out of range 问题求助

B树插入函数vector下标越界问题排查

问题说明

实现C++ B树插入函数时,插入50个及以下元素运行正常,但插入100个元素会触发vector subscript out of range错误,已尝试打印调试信息但无法定位问题。

核心排查点

  • 节点分裂逻辑漏洞
    检查分裂节点时的vector操作:
    • 分裂后原节点与新节点的元素分配是否符合B树阶数规则,比如是否错误地访问了超过原节点vector大小的下标
    • 父节点插入中间元素时,是否误用了超出自身vector当前size的下标
  • 递归插入的边界处理
    递归到叶子节点插入元素时,是否在元素数量达到上限时未及时触发分裂,导致后续访问vector下标越界
  • vector下标访问的合法性
    遍历代码中所有用[]访问vector的位置,确认下标是否严格小于vector.size():
    • 查找插入位置的循环是否存在越界,比如循环结束时下标等于size却仍用[]访问
    • 空vector或未初始化的vector是否被直接用[]访问
  • 调试信息强化
    补充打印每个节点的元素数量、当前访问的下标值,重点跟踪触发错误前最后几次插入的节点状态,尤其是分裂前后的vector变化

代码片段检查示例

比如节点分裂的关键代码,要确认vector访问的合法性:

void split(Node* parent, int index) {
    Node* child = parent->children[index];
    Node* newChild = new Node(child->isLeaf);
    newChild->keys.resize(order/2 - 1);
    // 这里要确保child->keys的size >= i + order/2
    for (int i = 0; i < order/2 - 1; i++) {
        newChild->keys[i] = child->keys[i + order/2];
    }
    // 父节点插入中间元素的逻辑也要检查下标是否合法
    parent->keys.insert(parent->keys.begin() + index, child->keys[order/2 - 1]);
}

如果child->keys的实际大小不足order/2,就会触发下标越界。

内容的提问来源于stack exchange,提问作者Vinh Phạm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:49:53