0
Figure
から派生した異なる種類の数字のリストがあります。私は最後から来る特定のタイプの2つの要素を見つけたいと思う。リストの最後から最後の2つの要素を取得できません。C++、mfc
私は2つのイテレータを持っています。最初のものが要素を見つけると、2番目のイテレータは最初のイテレータの値を取得し、リストの先頭に向かって続きます。
2番目のイテレータのような継ぎ目は正しい値を見つけますが、デバッグではイテレータが正しい値を取得していることがわかりましたが、t2
はオブジェクトに割り当てません。カントはそれを理解しています。
問題は、リストに2つの要素がある場合にのみ表示されます。ここで
コードです:あなたのコード例で
std::list<Figure*>::iterator it = pDoc->selectedFigures.end();
std::list<Figure*>::iterator it2;
if(it != pDoc->selectedFigures.begin())
it--;
else return;
Point *t1 = new Point();
Point *t2 = new Point();
t1 = NULL;
t2 = NULL;
while(it != pDoc->selectedFigures.begin()){//finds the first point
if((**it).type() == 1){
t1 = (Point*)(*it);
it2 = it;
break;
}
--it;
}
while(it2 != pDoc->selectedFigures.begin()){//finds the second point
if((**it2).type()==1 && (*it2) != t1){
t2 = (Point*)(*it2);
break;
}
--it2;
}
ようなタイプをハードコーディング、私はプログラムをデバッグし、それは 'T2 =(ポイントに着くんが*)(* it2); 'だから、それは問題ではないと思います。 't1 = t2 = NULL'は最初だけですが、最初のポイント' t1'が見つかった後は 'null'ではありません。 – wdc
ああ、良い点。あなたの例では、新しいポイントをt1とt2に割り当ててから、そのメモリに(?)リークするので、私は混乱しました。 –
デバッガで 't2 =(Point *)(* it2);'に達すると、t2が割り当てられます。 100%確実なprintfを追加してください。 テスト環境の外では、問題は2番目のループの追加条件になります。あなたのリストは 'Figure *'で構成されているので、リスト中の「タイプ1の2つのFigure」は同じアイテムへのポインタになります。 –