Programm überspringt Abfrage (if(element==NULL))

Hallo,

Eine If-Bedingung wirkt sich nie auf den Code aus, welcher nach dem Ende des Ifs steht. Das bedeutet, wie schon oben beschrieben:
C++:
void hoehe_berechnen(struct stellplaetze *kopf, struct container *container, struct stellplaetze *lkw, struct stellplaetze *frachter)
{
    if(kopf==NULL)
    {
       //Wenn Kopf NULL ist kommt man hier rein
    }
    
    //und egal ob wir oben in dem IF drin waren oder nicht, wir kommen auf jeden Fall hier her
    kopf->hoehe+=1;
    hoehe_berechnen(kopf, container->next, lkw, frachter);
}

Daher wird die Funktion IMMER rekursiv aufgerufen, und hört somit nie auf.
 
Zuletzt bearbeitet von einem Moderator:
Ja genau hehe aber ich frage mich ja seit dem 1. Post, wieso "kopf" anscheindend nicht =NULL ist..da suche ich ja schon so lange rum..): Trotzdem danke schonmal an euch :)
 
Ja genau hehe aber ich frage mich ja seit dem 1. Post, wieso "kopf" anscheindend nicht =NULL ist..da suche ich ja schon so lange rum..):
Weil deine Funktion so falsch ist, dass es vorher knallt bevor kopf in Zeile 67 erfolgreich auf NULL getestet werden würde.

Insbesondere in Zeile 73 prüfst du ob container == NULL ist. Wenn das der Fall ist, rufst du die Funktion hoehe_berechnen rekursiv auf. Dabei greifst du auf kopf->next->container zu. Falls kopf allerdings auf das letzte Element der Liste zeigt, gibt es kein nächstes Element; d.h. kopf->next ist NULL... BOOM!

Würde es halt gerne auf die rekursive Weise lösen..
Rekursion ist aber leider in C/C++ limitiert. D.h. wenn deine Liste sehr groß ist, wächst die Rekursionstiefe proportial an und dein Programm wird abstürzen wenn der Stackspeicher überschritten wird. Eine iterative Lösung ist in C/C++ vorzuziehen, außer man kann davon ausgehen, dass die Rekursionstiefe eine kleine obere Grenze besitzt.

Gruß
 
Zuletzt bearbeitet:
Ok jetzt ist es schon besser :D
Danke für die Hilfe, wir haben mittlerweile auch eine iterative Lösung erarbeitet ;)

Grüße
 
Zurück