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: 0xb7fb9b45

    Das 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 👍


Anmelden zum Antworten