Variable ändert sich ohne erkennbaren Grund ????



  • Hey Leute,

    ich war gerade am Programmieren und ohne einen erkennbaren Grund ändert sich eine Variable von 0 auf 4619370732411552040. Bisher konnte ich das Problem auf den Bereich eingrenzen:

    printf("%ld\n",t);
    	for(k=0;k<h;k++)
    	{
    		for(l=0;l<h;l++)
    		{
    			for(m=0;m<h;m++)
    			{
    					Index=p*k+p*h*l+p*h*h*m;
    					rx[Index]=(k+G[0])*scale;
    					ry[Index]=(l+G[1])*scale;
    					rz[Index]=(m+G[2])*scale;
    			}
    		}
    	}
    	printf("%ld\n",t);
    

    Oben ist die Variable t=0 und unten plötzlich t = 4619370732411552040!
    Wie kann sowas zustande kommen? Wie ihr sieht passiert sonst nichts mit der Variablen in diesem Bereich. Hat jemand eine Idee? Ich wäre über jede Hilfe dankbar. Achja bevor ich es vergesse alle anderen Variablen haben absolut nichts mit t zu tun.

    Viele Grüße,
    Walter White



  • Z.B. Arrayüberlauf.
    Dann hängt das Verhalten davon ab, in welcher Reihenfolge deine Variablen auf dem Stack liegen.

    Mach mal ein minimales Programm. Also den Code von oben und die dazugehörigen Variablendefinitionen und probier das nochmal aus.
    Tritt der Fehler noch auf, poste das kleine Programm.



  • Der Wert von t ist aber auch ziemlich groß.
    Das sieht nach einer 64 Bit-Zahl aus.

    Auf welchem System mit welchem Compiler machst du das?
    Und wie ist t definiert?



  • Das ist wirklich ein Arrayüberlauf! Vielen Dank! Ich hätte das nie aus diesem kleinen Abschnitt heraus erkannt. Vielen vielen Dank!

    Klingt blöd aber hätte nicht gedacht, dass ein Arrayüberlauf die Variable t auch beeinflussen kann.
    Danke! Danke!



  • walter White schrieb:

    Das ist wirklich ein Arrayüberlauf! Vielen Dank! Ich hätte das nie aus diesem kleinen Abschnitt heraus erkannt. Vielen vielen Dank!

    Bitt beim nächsten mal zumindest die Variablendefinitionen mitposten.

    walter White schrieb:

    Klingt blöd aber hätte nicht gedacht, dass ein Arrayüberlauf die Variable t auch beeinflussen kann.
    Danke! Danke!

    In C gibt es keine Überprüfung der Arraygrenzen. Musst du alles selber machen.

    Ein if(Index > Grenze) schadet nicht. Oder nimm gleich assert
    Allerdings musst du dir dann überlegen, was du im Fehlefall machst.
    Ein Meldung alleine reicht nicht, da ja im Programm etwas schief gelaufen ist.



  • Ich wusste nicht das sowas passieren kann. Beim nächsten Mal denke ich aufjedenfall daran :D!


Log in to reply