Element aus Array "löschen"



  • Hallo!

    Habe eine Art CD-Datenbank geschrieben. Eigentlich eignetlich ist dafür eine "verkettete Liste" die beste Lösung. Ich möchte es aber trotzdem anders versuchen.
    Dazu habe ich mit malloc folgendes

    Array von Zeigern

    erstellt:

    typedef struct _cd_
    {
      char *titel;
      char *artist;
      char *price;
      ...
    } cd_t;
    
    cd_t **cd = NULL;
    
    /* ent wurde vorher ermittelt ... */
    cd = (cd_t **)malloc((ent + 1) * sizeof(cd_t *));
    

    Es liegt nun ein mit NULL terminiertes Array von Zeigern des Typs 'cd_t' vor. Soweit ist alles klar.
    Nun möchte ich aber einen Zeiger aus diesem Array löschen. Wie läßt sich das am besten anstellen? Dazu, so meine Gedanken, müßte man zunächst titel, artist usw. mit free() freigeben, dann alle nach cd[gesuchte_cd] folgenden cd-Zeiger um eine Position versetzen und schließlich mit realloc das Array um eins kürzen. 😕
    Liege ich da richtig?

    Gruß
    Michael



  • bloodshower schrieb:

    Es liegt nun ein mit NULL terminiertes Array von Zeigern des Typs 'cd_t' vor. Soweit ist alles klar.

    Nein, es liegt ein Array vor, das keine gekennzeichneten Endmarkierung hat. (Cast ist überflüssig, Fehlerüberprüfung von malloc fehlt).

    Nun möchte ich aber einen Zeiger aus diesem Array löschen. Wie läßt sich das am besten anstellen? Dazu, so meine Gedanken, müßte man zunächst titel, artist usw. mit free() freigeben, dann alle nach cd[gesuchte_cd] folgenden cd-Zeiger um eine Position versetzen und schließlich mit realloc das Array um eins kürzen.

    Ich werde nicht so recht schlau aus dem Satz. Du kannst natürlich im Stile eines Bubbelsortierers den zu löschenden Zeiger ganz nach hinten manövrieren (oder, wenn Dir die Reihenfolge egal ist, einfach mit dem letzten vertauschen), und die Einzelelemente löschen. Ob realloc dann wirklich was verkürzt, oder gar nichts macht, kannst Du mit genormten Mitteln wohl eh nicht herausfinden.


Anmelden zum Antworten