[C++] Komisches Verhalten

12/05/2010 11:21 black0utCpp#1
Ich wollte mal schauen was passiert wenn man ein Array zu einem Integer Castet habe das innerhalb eines "keygens" gemacht und bin verwirrt!Wenn ich den Array zu einem Integer caste kommt bei jedem Durchlauf ein anderer Wert raus warum ? Und vorallem was passiert wenn ich einen array caste wird immer nur das erste Element (also userid[0] ) behandelt oder wie kann ich mir das vorstellen ?

Hier der Source Code :

Code:
#include <windows.h>
#include <iostream>


#define SUCESS 0

using namespace std;




int main(void) //lazy 
{

 int part1 , part2 ,part3; // wenn ich die lösche kommt keine Ausgabe (?)
 int  userid []={ 123456 };

 
 cout<<"Your UserId is ?\n";
 cout<<"Userid is set to 123456\n";
 getchar();

 cout<<"Start calcuating you Key!\n";
 getchar();

 userid[0];//<- Set UserId to 0

 //Berrechnung

 for(int i=5 ;i>userid[i];i++)
 {
 userid[i]=(int)userid/238;//anstatt userid[i] = userid[i]/238 was passiert hier 
 cout<<userid[i]<<"-";

}

 //End




system("pause");// schlecht ich weiß 

return SUCESS;
}
Sorry falls die Frage zu dumm ist ich komm einfach nicht dahinter .
12/05/2010 11:54 Shadow992#2
Quote:
Originally Posted by black0utCpp View Post
Ich wollte mal schauen was passiert wenn man ein Array zu einem Integer Castet habe das innerhalb eines "keygens" gemacht und bin verwirrt!Wenn ich den Array zu einem Integer caste kommt bei jedem Durchlauf ein anderer Wert raus warum ? Und vorallem was passiert wenn ich einen array caste wird immer nur das erste Element (also userid[0] ) behandelt oder wie kann ich mir das vorstellen ?

Hier der Source Code :

Code:
#include <windows.h>
#include <iostream>


#define SUCESS 0

using namespace std;




int main(void) //lazy 
{

 int part1 , part2 ,part3; // wenn ich die lösche kommt keine Ausgabe (?)
 int  userid []={ 123456 };

 
 cout<<"Your UserId is ?\n";
 cout<<"Userid is set to 123456\n";
 getchar();

 cout<<"Start calcuating you Key!\n";
 getchar();

 userid[0];//<- Set UserId to 0

 //Berrechnung

 for(int i=5 ;i>userid[i];i++)
 {
 userid[i]=(int)userid/238;//anstatt userid[i] = userid[i]/238 was passiert hier 
 cout<<userid[i]<<"-";

}

 //End




system("pause");// schlecht ich weiß 

return SUCESS;
}
Sorry falls die Frage zu dumm ist ich komm einfach nicht dahinter .
Wenn ich mich nicht irre rechnest du an dieser Stelle:
PHP Code:
userid[i]=(int)userid/238
mit der Adresse an der das Array anfängt weiter.
Außerdem hat userid[] eine größe von 1:
PHP Code:
 int  userid []={ 123456 }; 
Das ganze kann also nur zu einem "komischem" Verhalten führen.
12/05/2010 12:00 MoepMeep#3
Code:
userid[0];//<- Set UserId to 0
Kommt nur mir das komisch vor? o.o
12/05/2010 15:11 black0utCpp#4
Quote:
Originally Posted by MoepMeep View Post
Code:
userid[0];//<- Set UserId to 0
Kommt nur mir das komisch vor? o.o
Wollt schauen ob sich damit das verhalten verändert.
Mit Set UserId to 0 wollt ich sicher sein das in der for schleife alles klar ist.
Mir ist klar , dass das ziemlich unsinnig ist aber in meiner Verzweiflung :D


Edit : aber warum kommt keine Ausgaben wenn ich die Integer Vars part1 part2.. .lösche?
12/05/2010 15:42 MoepMeep#5
btw
Code:
for(int i=5 ;i>userid[i];i++)
Soll die Schleife so sein? ^^
12/05/2010 15:48 Shadow992#6
Quote:
Originally Posted by black0utCpp View Post
Wollt schauen ob sich damit das verhalten verändert.
Mit Set UserId to 0 wollt ich sicher sein das in der for schleife alles klar ist.
Mir ist klar , dass das ziemlich unsinnig ist aber in meiner Verzweiflung :D


Edit : aber warum kommt keine Ausgaben wenn ich die Integer Vars part1 part2.. .lösche?
Ich sagte dir doch bereits alles.
Diese beiden Zeilen:
PHP Code:
int  userid []={ 123456 }; 
und
PHP Code:
userid[i]=(int)userid/238
Sind schuld an dem undefinierten verhalten.
Du initialisierst userid als Integer-Array mit der Größe 1 anschließend
hast du eine Schleife, die aber bereits bei 5 anfängt.
Das ganze kann nichts werden, du greifst damit auf einen Speicherbereich zu, der deinem Programm garnicht gehört.
Es ist also kein Wunder, dass dein Programm ein undefiniertes Verhalten an den Tag legt.
Du hast Glück, dass das Programm nicht abstürtzt, sondern eben nur nichts mehr ausgibt.

Wenn du ganz viel Pech hast könnte das sogar zu einem Systemabsturtz führen (ist wohl eher selten der Fall, da Windows das im Normalfall dann erkennt und bereinigt).
12/05/2010 18:48 black0utCpp#7
Oh man was ein Denkfehler hatte eine lange Pause naja danke Leute