Gültigkeit Pointer und new



  • Folgendes Programm:

    main.cpp

    #include <iostream>
    #include <string>
    #include "oberklasse.h"
    
    using namespace std;
    
    int main()
    {
    	string *i;
    	oberklasse obj;
    	obj.createNewHeapData(i);
    	cout << (*i).length();
    
    	return 1;
    }
    

    oberklasse.h

    #ifndef OBERKLASSE_H_
    #define OBERKLASSE_H_
    
    #include <string>
    
    class oberklasse
    {
    public:
    	oberklasse();
    	virtual ~oberklasse();
    
    	virtual char ausgabe();
    	void createNewHeapData(std::string* item);
    };
    
    #endif /*OBERKLASSE_H_*/
    

    oberklasse.cpp

    #include "oberklasse.h"
    
    oberklasse::oberklasse()
    {
    }
    
    oberklasse::~oberklasse()
    {
    }
    
    char oberklasse::ausgabe()
    {
    	return 'b';
    }
    
    void oberklasse::createNewHeapData(std::string* item)
    {
    	item = new std::string("baba");
    }
    

    Wenn ich es ausführen will, sehe ich keine Ausgabe und valgrind zeigt:
    Use of uninitialisied value of size 4 ...

    Wie kann ich einer Memberfunktion keinen Pointer übergeben, dann mit new ein Objekt anlegen, und dass dann wieder ausserhalb der funktion benutzen?

    MFG
    Ace



  • Du musst eine Referenz auf deinen Zeiger in der Funktion übergeben, da ja sonst eine Kopie gemacht wird und sich deine globale variable nicht verändert. Das wurde gerade eben schonmal diskutiert.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-236024.html
    Warum erzeugst du deinen String überhaupt dynamisch?



  • Und wo ist deine Freigabefunktion?

    Wie Braunstein sehe ich hier keinen Grund, den Speicher für den std::string dynamisch anzufordern.


Anmelden zum Antworten