Programmabsturz bei Templateverwendung (operator=)



  • Hallo liebe Gemeinschaft,

    ich hab da ein merkwürdiges Problem bei meinem Klassentemplate.

    template <typename T>
    class KlassenTemplate
    {
    	public:
    		KlassenTemplate(T*);
    		T& operator* ();
    		T& operator= (T&);
    
    	private:
    		T* pointer;
    
    };
    

    Realisiert sind die Methoden so:

    template <typename T>
    KlassenTemplate<T>::KlassenTemplate(T* p)
    {
    	p=NULL;
    }
    
    template <typename T>
    T& KlassenTemplate<T>::operator*()
    {
    	return *pointer;
    }
    
    template <typename T>
    T& KlassenTemplate<T>::operator=(T& neu)
    {
    	this=&neu;
    	return this;
    }
    

    Wenn ich jetzt in der main.cpp

    int main()
    {
    	KlassenTemplate<int> p=new int;
    	*p=3;
    }
    

    aufrufe, dann kompiliert das Programm zwar ordentich, stürzt aber mit einem Segmentation Fault ab.
    Wo ich hier aber auf falschen Speicher zugreifen könnte, sehe ich nicht.

    Danke für eure Hilfe.



  • denk mal nach

    in der definition des = ops weist du deinem pointer eine addresse zu
    wäre kein problem aber dann darfst du nur variablen damit benutzen

    also nur sowas

    int main()
    {
        int i = 3;
        Klassentemplate<int> p = new int;
        *p = i;
    }
    

    allerdings ist das so wie du es schreibst nicht so ganz gut glaube ich



  • althippie schrieb:

    [...] dann kompiliert das Programm zwar ordentich

    Welcher Compiler (zum Henker) kompiliert this = &neu ?!?

    Und im Konstruktor schau nochmal genau hin welchem Pointer Du NULL zuweist.



  • Habe mir eure Tipps zu Herzen genommen.

    Es ist natürlich Blösinn im Konstruktor die Adresse der Variablen T auf NULL zu setzen!!

    Gemeint ist natürlich, dass der pointer jetzt auch auf T zeigt. Damit hat es hervorragend geklappt.

    Als Kompiler nutze ich g++-4.3.2

    Danke nochmal!


Anmelden zum Antworten