Freigeben von Speicher



  • Hallo!

    Ich habe eine Struktur:

    typedef struct _Conjunction_{
    	int anz_inputs;
    	char input_state[MAX_INPUTS];
    	int pos_in_checkbox_array[MAX_INPUTS];
    	char* input_name[MAX_INPUTS];
    } Conjunction;
    

    und erzeuge diese dann mit

    Conjunction* NewConjunction()
    {
    	Conjunction* conj=(Conjunction*)malloc(sizeof(Conjunction));
    
    	if(conj){
    		conj->anz_inputs=0;
    		for(i=0;i<MAX_INPUTS;i++){
    			conj->input_name[i]=(char*)malloc(50*sizeof(char));
    			strcpy(conj->input_name[i],"leer");
    			conj->input_state[i]=0;
    		}
    	}
    	return conj;
    }
    

    Muss ich den Speicher dann wieder wie folgt freigeben:

    void DeleteConjunction(Conjunction* conj)
    {
    	int i;
    	if(conj){
    		for(i=0;i<MAX_INPUTS;i++) 
    			free(conj->input_name[i]); //oder brauche ich diese Schleife nicht?
    
    		free(conj);
    	}
    }
    

    Reicht nicht auch:

    void DeleteConjunction(Conjunction* conj)
    {
    	if(conj){
    		free(conj);
    	}
    }
    


  • Wenn du die Schleife wegläßt, werden die hier:

    conj->input_name[i]=(char*)malloc(50*sizeof(char));
    

    allozierten Speicherblöcke nicht freigegeben.



  • Hab ich mir auch schon gedacht (deswegen hab ich es ja so programmiert), aber wenn ich mit dem Visual Studio debugge, sieht es so aus, als wenn der Speicher von conj->input_name[..] auch durch

    free(conj);
    

    mit freigegeben wird. Naja, ich lasse es drin.


Anmelden zum Antworten