C ++がwhileステートメントを評価するときに、whileステートメントの条件が満たされていない場合でも、基になるifステートメントも評価するという問題があります。
ite_candidats は、バイナリ マップ ツリーのカスタム イテレータです。訪問するノードがなくなると、ite_candidat は NULL と評価されます。というわけでしばらく終了。しかし、ite_candidats.clecourante() 呼び出しから、基になるノードが NULL であるというアサーション エラーが発生します。ite_candidats.clecourant() を評価するべきではありません。
プログラムをデバッグ モードで実行したところ、訪問するノードがなくなったときに !!ite_candidats が実際に false と評価されました。ifブロックをコメントアウトすると、プログラムはwhileループから抜け出し、すべて問題ありません...
ite_candidats 演算子 bool() の演算子オーバーロードは、clecourante() を呼び出しません。
while(!!ite_candidats){
if(ite_candidats.clecourante() != nompersonne){
{...}
}
ite_candidats++;
}