realloc



  • Hallo, ich kann mir irgendwie nicht erklären warum mein Program nicht so läuft wie es soll. Ich glaube die Ursache des Fehlers auf folgenden code Ausschnitt eingegrenzt zu haben:

    if(erdbeereneimer->anzahl == erdbeereneimer->kapazitaet){
    	erdbeereneimer->erdbeeren = realloc( 
                erdbeereneimer->erdbeeren,sizeof(erdbeere)*erdbeereneimer*2);
    	if(erdbeereneimer->erdbeeren != NULL){
    		erdbeereneimer->kapazitaet *= 2;
    	} else {
    		return -1;
    	}
    }
    return erdbeereneimer->anzahl++;
    

    Nachdem beide if-Bedingungen positiv durchlaufen wurden stürzt das Programm an einer späteren Stelle beim durchlaufen der Erdbeeren ab. Anhand von Stichproben habe ich festgestellt, dass die Erdbeeren nicht mehr das sind was sie mal waren. Also es steht einfach nur Müll an den Stellen an denen vor dem realloc etwas sinvolles stand. Ich habe keine anderen pointer auf die Erdbeeren, nur offsets. Hat jemand eine Idee woran das liegen könnte? Also scheinbar ist die realloc Anweisung die Ursache, aber warum?



  • Hat sich erledigt. Da war doch ein lokaler pointer auf die Erdbeeren.



  • erdbeereneimer->erdbeeren wird nicht freigegeben wenn realloc() failt, da musst du aufpassen.


Anmelden zum Antworten