newbifrage -> heap



  • Hallo,
    ich versuche nun eine variable anzulegen die in der methode einer klasse initialisiert wird. Ich will sie global solange verfügbar machen bis ich den heap wieder freigebe.
    Aber bei sowas meckert mein compiler:

    Class1::teste()
    {
    int * a = new int;
    *a = 4;
    }

    Class1::teste2()
    {
    cout<< *a << endl;
    delete a;
    }

    Warum?
    Ist es nicht so dass ich einfach die Variable solange global verfügbar mache bis ich sie wieder freigebe?



  • Nein, die Variable existiert zwar noch aber eine Zeigervariable für diese Variable existiert nur in der ersten Funktion und wird nach deren Beendigung gelöscht und du hast keinen weiteren Zugriff auf sie. Wenn du von allen Klassenmethoden auf diese Zugreifen willst, dann musst du einen Zeiger auf die Variable als Membervariable speichern.



  • Ja der Speicher bleibt schon verfügbar bis du ihn löscht, aber der Zeiger (heißt bei dir 'a') ist noch eine extra Variable die auf dem Stack liegt und nach beenden der Methode teste() gelöscht wird. Dann hast du zwar noch Speicher, weißt aber die Adresse nicht mehr. -> Dumm gelaufen.

    class IntSpeicher
    {
    public:
        void set(int wert) { *speicher = wert; }
        int get() { return *speicher; }
        IntSpeicher() { speicher = new int; }
        ~IntSpeicher() { delete speicher; }
    private:
        int* speicher;
    };
    

    Gruß



  • der mit new allozierte speicher ist schon global verfügbar, aber nicht die variable, in der du den zeiger abgelegt hast! nachdem dein programm teste() verlassen hat ist der mit new allozierte speicher zwar noch da, aber der zeiger darauf ist futsch.

    du mußt a als globale variable deklarieren. oder besser noch als klassenvariable von Class1.


Anmelden zum Antworten