wo ist der Speicher???



  • wenn ich den folgenden (nicht ganz sinnvollen) Code ausführe zeigt mir der Taskmanager von Windows XP eine Speicherdifferenz (davor -> danach) von knapp 200KB an. Wo ist der Speicher geblieben. Bei genügend langer Laufzeit würde das Programm wegen Speichermangels abstürzen:

    double** list = new double*[1e6];
    	for (uint i=0; i<1e6; i++)
    		list[i] = new double;
    	for (i=0; i<1e6; i++)
    	{
    		delete list[i];
    		list[i] = NULL;
    	}
    
    	delete[]list;
    	list = NULL;
    

    <hume>Code-Tags eingefügt</hume>



  • also mein compiler compiliert das programm nicht



  • [edit]hier stand mal mist[/edit]

    mfg



  • Wie kommst du darauf, dass ein Speicherloch entsteht? Keine Ahnung was du im Taskmanager abliest, es ist aber ziemlich sicher kein durch dein Programm entstandenes Speicherleck. Der Code ansich ist jedenfalls korrekt.
    Übrigens kannst du mit new/delete keine dauerhaften Speicherlecks erzeugen. Denn das für dich "unsichtbare" Application-Framework rund um main(), WinMain() oder was auch immer bzw. das OS ansich sorgen schon dafür, dass übrig gebliebene Speicherreserven wieder freigegeben werden.

    btw:
    Nutze in Zukunft Code-Tags, sonst lässt sich der Code schwer durchschauen. Ausserdem ist 1e6 ein Floating-Point Ausdruck. Array Indices müssen aber Ganzzahlen sein. Nur weil der Compiler das gleichwertig umwandeln kann und deshalb wohl nicht anmeckert, ist diese Schreibweise ziemlich ungünstig gewählt.


Log in to reply