Variablen Adressen speicher
-
Hallo,
ich habe hier ein kleines Testprogramm geschrieben, mit dem ich die Adressen einiger Varieben speichern möchte, um sie später wieder abzufragen!
Ich kann zwar die Adressen speichern, aber in der Main-Funktion bekomme ich sie nicht!
Hier mal der Code:
#include <iostream> #include <vector> using namespace std; struct Var{ int name; int typ; void* var; }; vector<Var> vars; void regVar( bool *var, int name ) { Var v; v.name = name; v.typ = 0; v.var = var; cout << "Reg Adresse: " << v.var << endl; vars.push_back( v ); } void regVar( int *var, int name ) { Var v; v.name = name; v.typ = 1; v.var = var; cout << "Reg Adresse: " << v.var << endl; vars.push_back( v ); } bool getVar( int name, void* var, int &typ ) { if( vars.size() == 0 ) return false; for( int i = 0; i < vars.size(); i++ ){ if( vars.at( i ).name == name ){ typ = vars.at( i ).typ; cout << "Adress befor: " << var << endl; var = vars.at( i ).var; cout << "Get Adresse: " << var << endl; return true; } } return false; } int main() { bool wahr = true; bool falsch = false; int zahl = 12; cout << "Adresse Wahr: " << &wahr << endl; cout << "Adresse Falsch: " << &falsch << endl; cout << "Adresse Zahl: " << &zahl << endl; regVar( &wahr, 0 ); regVar( &falsch, 1 ); regVar( &zahl, 2 ); int typ; void* var; if( getVar( 0, var, typ ) ){ cout << "Wahr: " << var << endl; } if( getVar( 1, var, typ ) ){ cout << "Falsch: " << var << endl; } if( getVar( 2, var, typ ) ){ cout << "Zahl: " << var << endl; } return 0; }
und das ist die Ausgabe des Progs:
Adresse Wahr: 0xbffffae7
Adresse Falsch: 0xbffffae6
Adresse Zahl: 0xbffffae0
Reg Adresse: 0xbffffae7
Reg Adresse: 0xbffffae6
Reg Adresse: 0xbffffae0
Adress befor: 0xb7fb9b45
Get Adresse: 0xbffffae7
Wahr: 0xb7fb9b45
Adress befor: 0xb7fb9b45
Get Adresse: 0xbffffae6
Falsch: 0xb7fb9b45
Adress befor: 0xb7fb9b45
Get Adresse: 0xbffffae0
Zahl: 0xb7fb9b45Das Problem ist irgendwie die Speicheradresse: 0xb7fb9b45 !
Wieso wird mir nicht die richtige Speicheradresse von der Funktion getVar übergeben?mfg matze
-
also wenn ich die Funktion getVar umschreibe:
void *getVar( int name, int &typ ) { ... return vars.at( * ).var; ... }
und die dann dementsprechen benutze, dann funktionierts.
Dann bekomme ich die richtige Speicheradresse!
Aber warum anders nicht?
-
OK danke jungs ich habe das problem
Die Funktion getVar muss so aussehen:
bool getVar( int name, void*& var, int &typ ) { if( vars.size() == 0 ) return false; for( int i = 0; i < vars.size(); i++ ){ if( vars.at( i ).name == name ){ typ = vars.at( i ).typ; cout << "Adress befor: " << var << endl; var = vars.at( i ).var; cout << "Get Adresse: " << var << endl; return true; } } return false; }
-
Jo, danke auch, Kumpel
-
alter du hast es drauf!
-
LOL nicht schlecht