Runtime-error, wenn keine Ausgabe stattfindet



  • hallo,
    ich hab heut mal einen kleinen b-sort-algo geschrieben und wollt ein bissl rumoptimieren, darum wird vor dem sortieren die zeit genommen, dann 100 mal ein Feld mit zahlen gefüllt, dieses sortiert und dann die zeit danach genommen -> Zeitdifferenz wird dann ausgegeben. Dabei bin ich auf etwas gestoßen, was ich net so recht versteh, aber hier erst mal der code:

    //main.cpp
    #include <iostream>
    #include <stdio.h>
    #include <windows.h>
    
    using namespace std;
    #define SIZE 10
    
    LONGLONG alteZeit;
    LONGLONG diff;
    LONGLONG neueZeit;
    
    void Swap(int* a,int*b)
    {
    	int tmp=*a;
    	*a=*b;
    	*b=tmp;
    }
    
    int main()
    {
    	bool tauschen=true;
    	alteZeit=timeGetTime();
    
    	for(int h=0;h<100;h++)
    	{
    		int Feld[SIZE]={1,9,2,8,3,7,4,6,5,0};
    		while(tauschen)
    		{
    			tauschen = false;
    			for(int pos=0;pos<SIZE;++pos)
    			{
    				if(Feld[pos]>Feld[pos+1])
    				{
    					Swap(&Feld[pos],&Feld[pos+1]);
    					tauschen=true;
    				}
    			}
    		}
    
    		for(int t=0;t<SIZE;t++)	//Hier gibts FEHLER, wenn AUSKOMMENTIERT
    			cout<<Feld[t]<<endl;
    
    	}
    	neueZeit=timeGetTime();
    	diff=neueZeit-alteZeit;
    
    	printf("Tics: %e",diff);
    	getchar();
    
    	return 0;
    }
    

    das interessante daran ist, dass, wenn ich die ausgabe des feldes in der for(int t...)-schleife auskommentiere, es zu einem runtime-error kommt, was ich mir momentan noch nicht erklären kann.
    ich dachte zuerst, dass die fehlende endl (also flush/speicherleerung)-anweisung "schuld" ist am runtime-error, wnn ich das ganze auskommentiere,aber das ist nicht der fall...
    also, ich bin völlig ratlos und freue mich über jeden hinweis....
    Gruß & noch einen schönen sonntag-abend
    E-the-Real



  • Aaaalssooo:

    Erstmal hast Du einen Fehler:

    for(int pos=0;pos<SIZE;++pos) 
    { 
    }
    

    muss heisen:

    for(int pos=0;pos<SIZE-1;++pos) 
    { 
    }
    

    weil:

    Swap(&Feld[pos],&Feld[pos+1]);
    

    bei pos == 9 bedeuten würde:

    Swap(&Feld[9],&Feld[10]);
    

    Feld geht aber nur von 0 bis 9.

    Das nächste Problem:

    printf("Tics: %e",diff);

    %e bedeutet wenn ich mich recht entsinne double und diff ist als LONGLONG deklariert.

    Quick And Dirty:

    double t;
    t = diff; // Hm, ka ob man das so machen kann... Juuuungs :clown:
    printf("Tics: %e",t);
    //bzw.
    cout<<t;
    


  • ja, dankeschön!
    das SIZE-1, da hab ich mich vertippt, bzw. -1 vergessen...is natürlich logisch!
    aber das ändert nix am unerklärlichen runtime-error, also, wenn jemand da noch weiter weiss...ich bin hilflos ! 😉
    Gruß
    E-the-Real



  • aber das ändert nix am unerklärlichen runtime-error, also, wenn jemand da noch weiter weiss...ich bin hilflos !

    Das nächste Problem:

    printf("Tics: %e",diff);

    %e bedeutet wenn ich mich recht entsinne double und diff ist als LONGLONG deklariert.


Anmelden zum Antworten