Dreidimensionales Array freigaben



  • Hallo,

    ich habe mir ein dreidimensioanles Array erstellt:

    int ***zahlen = new int**[MAX];
    	for(int i=0;i<MAX;i++)
    	{
    		zahlen[i] = new int*[MAX];
    		for(int j=0;j<MAX;j++)
    		{
    			zahlen[i][j] = new int[MAX];
    			for(int k=0;k<MAX;k++)
    				zahlen[i][j][k] = i*j*k;
    		}
    	}
    

    Jetzt möchte ich dieses Array wieder freigeben aber ich glaube das es nicht richtig ist:

    for(int i=0;i<MAX;i++)
    	{
    		for(int j=0;j<MAX;j++)
    		{
    			delete[] zahlen[i][j];
    		}
    		delete[] zahlen[i];
    	}
    	delete[] zahlen;
    

    Wie gebe ich so ein Array wieder frei ?

    mfg



  • Genau auf dem umgekehrten Weg wie du allokiert hast, passt also. Oder spar dir den Spaß und verwende boost::multi_array.

    grüße



  • Vielen Dank schonmal, aber bist du dir wirklich sicher das der gesamte Speicher wirklich freigegeben wird ?



  • Wenn MAX eine Konstante ist, deren Wert zur Compilezeit feststeht, dann erstelle dein dreidimensionales Array so:

    int(*zahlen)[MAX][MAX] = new int [MAX][MAX][MAX];
    
      for(int i=0;i<MAX;i++) 
        { 
            for(int j=0;j<MAX;j++) 
            { 
                for(int k=0;k<MAX;k++) 
                    zahlen[i][j][k] = i*j*k; 
            } 
        } 
    delete[] zahlen;
    

    🕶
    mfg


Anmelden zum Antworten