Verständnisproblem zu malloc



  • Meine Frage bezieht sich auf ein Programm aus dem openbook C von A bis Z. In Kapitel 23.2 werden doppelt verkettete Listen eingeführt. Die Funktion anhaengen soll jetzt mit dem ersten Datensatz eine Liste erschaffen und dann mit jedem weiteren Aufruf ein Element hinten anhängen.

    Jetzt zu meiner Frage:
    Ist die Speicherreservierung für das letzte Element in Zeilen 8 und 9 nötig, da bei einer leeren Liste das letzte auch gleich das erste Element ist und dafür in den Zeilen 23 und 24 Speicher reserviert wird ?
    anfang und ende sind global definierte Pointer auf die Struktur.

    void anhaengen(char *n, char *v, int at, int am, int aj,
                   int eint, int einm, int einj, long g) {
       /* Zeiger zum Zugriff auf die einzelnen Elemente
        * der Struktur */
       struct angestellt *zeiger, *zeiger1;
       /* Wurde schon Speicher für den ende-Zeiger bereitgestellt? */
       if(ende == NULL) {
          if((ende=(struct angestellt *)
            malloc(sizeof(struct angestellt))) == NULL) {
             printf("Konnte keinen Speicherplatz für ende "
                    "reservieren\n");
                    return;
          }
       }
       /* Wir fragen ab, ob es schon ein Element in der Liste gibt.
        * Wir suchen das Element, auf das unser Zeiger *anfang
        * zeigt. Falls *anfang immer noch auf NULL zeigt, bekommt
        * *anfang die Adresse unseres 1. Elements und ist somit der
        * Kopf (Anfang) unserer Liste */
       if(anfang == NULL) {
          /* Wir reservieren Speicherplatz für unsere
           * Struktur für das erste Element der Liste */
          if((anfang =(struct angestellt *)
            malloc(sizeof(struct angestellt))) == NULL) {
             fprintf(stderr,"Kein Speicherplatz vorhanden "
                            "für anfang\n");
             return;
          }
          ...
       else
       {
          ...
       }
    


  • ein dolles buch, das den rückgabewert von malloc nach irgendwas castet.


Anmelden zum Antworten