Programm läuft scheinbar endlos



  • Hallo,

    ich programmiere derzeit an einer Version des Iterative Closest Point Algorithm und bisher lief mein Programm (noch nicht so ganz fehlerfrei, aber es lief durch).
    Ich arbeite unter Linux mit dem QT-Creator.

    Nun zu meinem Problem: In folgender Codesequenz

    // set constraints
      pair<vector<double>, vector<double> > myconstraintdata;
      vector<double> constraint_x;
    
      for(int i = 0; i < _mypairings.size(); i++)
      {
        constraint_x.push_back(_mypairings.at(i).first.at(0));
        constraint_x.push_back(_mypairings.at(i).first.at(1));
        constraint_x.push_back(_mypairings.at(i).first.at(2));
        constraint_x.push_back(_planeNormal.x());
        constraint_x.push_back(_planeNormal.y());
        constraint_x.push_back(_planeNormal.z());
        myconstraintdata = make_pair(constraint_x, _mypairings.at(i).second);
        opt.add_inequality_constraint(myvconstraint, &myconstraintdata, 1e-4);
        constraint_x.clear();
      }
    

    hört das Programm scheinbar auf etwas zu machen. Bewusst habe ich keine Änderungen vorgenommen, die diese Schleife betreffen.

    _planeNormal ist global vorhanden, genauso wie _mypairings und _mypairings hat eine Größe von 13291. Wenn ich nun innerhalb der for-Schleife mittels

    cout << i << " ";
    

    die Iterationsvariable ausgeben lasse, um rauszufinden, wo's hängt, sieht die Ausgabe so aus:
    [...] 12770 12771 12772 12773 12
    ja, das endet tatsächlich mitten in der Ausgabe und statt 12774 steht nur 12 dort. Ich habe die Einträge an Stelle 12774 geprüft, es stehen zulässige Daten drin.

    Ich habe keine Ahnung, was hier passiert. Eine meiner beiden CPUs läuft auf 100%, wenn ich versuche im Debugmodus mehr herauszufinden, läufts mal durch und mal nicht.
    Ich weiß noch nicht mal, wie ich danach googlen soll.... 😞

    Ich freue mich über Vorschläge, was das Problem sein könnte oder wo(nach) ich suchen sollte.

    Viele Grüße
    Anja


  • Mod

    Wenn du Debugausgaben machst, dann flush nach jeder Ausgabe den Stream (mit flush oder endl) oder besser benutz einen ungepufferten Stream wie cerr.

    Versuch ein minimales Beispiel zu produzieren, welches so gerade noch den Fehler aufweist, so dass du uns ein vollständiges Programm zeigen kannst, an dem wir den Fehler nachvollziehen können. Es ist sehr gut möglich, dass du dabei bereits selbst den Fehler entdeckst, denn irgendwann während des Reduzierens wirst du den Fehler unabsichtlich raus machen und dann kannst du nachvollziehen, was der Fehler war. Daher ist das auch allgemein eine sehr gute Fehlersuchtechnik, selbst wenn man keine Fragen für ein Forum stellen möchte. Siehe:
    http://www.c-plusplus.net/forum/304133



  • Super, der Tipp mit dem flushen des Streams hat schon geholfen 🙂
    Vielen Dank!

    Damit konnte ich sehen, an welcher Stelle das Programm in ne Endlosschleife läuft und das Problem beheben.

    Gute Nacht 🙂


Anmelden zum Antworten