コードは最小ヒープを構築するための一部です。次の文が間違っているようです。デバッグ時にベクトルの添え字が範囲外になる
if ((child < (int)heap.size() - 1) && (heap[leftchild].cost > heap[leftchild + 1].cost))
しかし、私はそれを管理する方法を理解できません。助けてくれる人はいますか?どうもありがとうございました!!あなたは同様にif文以前に行ったよう
if (heap[child].cost < temp_h.cost)
は、この行はchild < size
のチェックを持っていません。
void heap_adjust_down(vector<rt_node> & rt, vector<h_node> & heap)
{
cout << "the" << heap.size() << "times" << endl;
cout << heap[heap.size()-1].id << endl;
int child;
for (int i = heap.size()/2; i >= 0; i--)
{
cout << " into build heap, i = " << i << endl;
int leftchild = 2 * i + 1;
h_node temp_h;
for (temp_h = heap[i]; leftchild < (int)heap.size(); i = child)
{
leftchild = 2 * i + 1;
cout << " into percdown" << endl;
child = leftchild;
if ((child < (int)heap.size() - 1) && (heap[leftchild].cost > heap[leftchild + 1].cost))
{
child++;
}
if (heap[child].cost < temp_h.cost)
{
heap[i] = heap[child];
rt[i].h_pos = child;
}
else break;
cout << "i = " << i << endl;
}
heap[i] = temp_h;
rt[i].h_pos = i;
}
}
これは私の問題解決のためのサイトではありません。 – immibis
'' leftchild == vector.size() - 1'ならどうなりますか? – bnaecker
最後のベクトル要素に+1ネイバーがありません。 –