C++ for-Schleife wird übersprungen



  • Hi,

    kann mir nicht erklären, weshalb meine for-Schleife einfach übersprungen wird. Vielleicht wisst ihr ja weiter?

    std::size_t j =0;

    for (double c=0 ;c<=1;c=c+0.001) {
    
        composite_spheres_model<double> Test (a,b,k,nu,mu,c,dT,Rn,n,N);
        Test.init();
        Test.determine_shear_modulus_n();
        G[0]=Test.shear_modulus_n(0);
        G[1]=Test.shear_modulus_n(1);
        G[2]=Test.shear_modulus_n(2);
        G[3]=Test.shear_modulus_n(3);
        G[4]=Test.shear_modulus_n(4);
        G[5]=Test.shear_modulus_n(5);
        G[6]=Test.shear_modulus_n(6);
    
    
        Geps[j] = G[0];
        Gstress[j] = G[1];
        G1[j]=G[2];
        G2[j]=G[3];
        G3[j]=G[4];
        G4[j]=G[5];
        G_all[j]= 0.25*(G[2]+G[3]+G[4]+G[5]);
        G_VRH[j]= (Geps[j]+Gstress[j])/2;
    
    
        ++j;
    }


  • Woher weißt du das?



  • wenn ich den Release Mode ausführe sind die ganzen Vektoren leer, wenn ich einen Haltepunkt setze und Schritt für Schritt durchgehe füllen sie sich ..

    habe die Vektoren vorher folgendermaßen initialisiert:

    std::vector<double> G;
    G.resize(7);
    std::vector<double> Geps;
    Geps.resize(1000);
    std::vector<double> Gstress;
    Gstress.resize(1000);
    std::vector<double> G1;
    G1.resize(1000);
    std::vector<double> G2;
    G2.resize(1000);
    std::vector<double> G3;
    G3.resize(1000);
    std::vector<double> G4;
    G4.resize(1000);
    std::vector<double> G_all;
    G_all.resize(1000);
    std::vector<double> G_VRH;
    G_VRH.resize(1000);


  • @ermmc sagte in C++ for-Schleife wird übersprungen:

    wenn ich den Release Mode ausführe sind die ganzen Vektoren leer

    wie genau stellst du das fest?



  • @ermmc sagte in C++ for-Schleife wird übersprungen:

    sind die ganzen Vektoren leer

    Und Test.shear_modulus_n kann nicht einfach 0 geliefert haben? Warum?



  • @Schlangenmensch wenn ich mir rechts Wert und Name angucke oder über cout den Vektor an einer bestimmten Stelle ausgeben lasse sind die Einträge alle 0 außer ich setze einen Haltepunkt und laufe das Programm "manuell" durch.



  • @ermmc sagte in C++ for-Schleife wird übersprungen:

    setze einen Haltepunkt und laufe das Programm "manuell" durch.

    Im Debug Modus, nicht Release (?)



  • Ok ich muss mich bei euch entschuldigen, ich dachte die "Liste" rechts aktualisiert sich im Release-mode und habe mir über cout genau den Vektor angeschaut der 0 sein soll...

    Aber gibt es dennoch eine Möglichkeit sich die aktuellen Vektoren ohne std::cout anzeigen zu lassen? Kann leider keinen Screenshot hochladen, ich hoffe ihr wisst was ich mit "Liste rechts" meine.

    -- Aber vielen Dank auf jeden Fall erstmal für die schnelle Hilfe!! 🙂 --

    Lokale Variablen		
    	G	<7 Elemente>	std::vector<double, std::allocator<double> >
    			nan	double
    			0	double
    			nan	double
    			nan	double
    			nan	double
    			nan	double
    			nan	double
    	G1	<1000 Elemente>	std::vector<double, std::allocator<double> >
    			nan	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			0	double
    			...

  • Mod

    Programme sind zum Ausführen da, nicht zum Debuggen. Du musst selber in dein Programm einprogrammieren, was es tun soll. Wenn das eine Anzeige im Debugger-Stil sein soll, dann musst du das einprogrammieren, damit es bei normaler Ausführung auch passiert. Ist aber durchaus etwas anspruchsvoller und mir fiele auch keine Standardkomponente dafür ein, denn das ist schon ein bisschen eine außergewöhnliche Anforderung.



  • @ermmc Wenn dein Programm korrekt ist dann macht es im Debug Mode das selbe wie im Release. Und wenn du Debug kompilierst, dann kannst du dir im Debugger alles ansehen. Natürlich nur während das Programm angehalten ist, während es läuft werden die ganzen Anzeigen nicht aktualisiert.
    Dazu gibt's aber den "Pause" Button, Breakpoints und die Möglichkeit das Programm Schrittweise auszuführen.



  • @hustbaer sagte in C++ for-Schleife wird übersprungen:

    @ermmc Wenn dein Programm korrekt ist dann macht es im Debug Mode das selbe wie im Release.
    Das bezieht sich aber nur auf die Nebeneffekte des Programms, aber nicht auf den internen Zustand, den du per Debugger beobachten kannst.



  • @TGGC Richtig. Daher guckt man sich ja auch den Debug-Build im Debugger an, weil das was nicht übereinstimmen muss eher dem entspricht was man erwartet.


Anmelden zum Antworten