Speicherleak??



  • Ich hab mich wieder mal verwirren lassen...

    int main()
    {
    	int *ptr=new int;
    	int k;
    	ptr= &k; //Speicherleak??????
    	*ptr=3;
    	cout<<*ptr<<"\n";
    }
    

    wenn man den Zeiger ptr auf ein int wie oben zeigen lässt und ihm dann die Addresse von k zuweißt müsste doch ein Speicherleak entstehen oder??



  • Genau.



  • Also entsthet ein Speicherleak.
    Da hab ich ja ein tolles Buch zur Hand das kommt gleich in den Abfall.



  • Und warum entsteht hierbei kein Speicherleak???

    #include<iostream>
    using namespace std;
    
    class Basis
    {
    public:
    	void id()
    	{
    		cout<<"Dies ist die Basis - Klasse\n";
    	}
    };
    
    class Abgeleitet : public Basis
    {
    public:
    	void id()
    	{
    		cout<<"Dies ist die abgeleitete Klasse\n";
    	}
    };
    
    int main()
    {
    	Abgeleitet abg;
    	Basis *bptr = new Basis;
    	bptr->id();
    
    	bptr = &abg;//Speicherleak???
    	bptr->id();
    
    }
    


  • Da entsteht auch eins.



  • das das selbe in grün.
    da du vom "new" speicher einfach wegzeigst geht er verschütt.
    Egal obs ne Klasse oder ne Variable is, die wirkung bleibt gleich.



  • eigentlich brauchst du dir den Quellcode nichtmal richtig durchlesen um zu sehen ob da ein Speicherlack ist 😃

    ein new ohne delete hat immer ein Speicherleck... einzige Ausnahme sind da Variablen/Klassen die von Anfang bis Ende des Programmes bestehen bleiben.
    (auch wenn hier ein delete am Programmende ebenfalls nett wäre, aber von den meisten Betriebssystemen automatisch gemacht wird)

    Du kannst dir das so vorstellen das mit new jedesmal ein Haus gebaut wird und du die Adresse per Post geschickt bekommst ("An Strasse 5 in Wuselhausen habe ich für dich dein Haus gebaut, pack deine Sachen und dann rein da").
    Wenn du die Adresse verlierst steht das Haus immernoch und wird es auch bis zum Ende der Welt tun, aber du kannst da nichtmehr hingeben weil du die Adresse nicht mehr weisst und wirst als Obdachloser auf der Strasse enden.
    Dazu blockiert es noch taures Baugelände.



  • dreaddy schrieb:

    ein new ohne delete hat immer ein Speicherleck... einzige Ausnahme sind da Variablen/Klassen die von Anfang bis Ende des Programmes bestehen bleiben.
    (auch wenn hier ein delete am Programmende ebenfalls nett wäre, aber von den meisten Betriebssystemen automatisch gemacht wird)

    wenn du so argumentierst, dann kann es nie ein speicherleck geben...

    aber das ist nur theoretisch der fall - es gibt ressourcen die ein OS nicht freigeben kann!



  • Shade Of Mine schrieb:

    wenn du so argumentierst, dann kann es nie ein speicherleck geben...

    Doch klar. Wenn ein lang laufendes System Speicher leckt, geht ihm irgendwann der freie Speicher aus.


Anmelden zum Antworten