Dynamische Arrays und Zugriff



  • Hey

    ich lern grad C (die Basics) und komme grade etwas ins stocken. Ich möchte eine generische Datenstruktur erstellen. Quasi ein Zeiger-Array auf beliebige Datentypen. Das Array möchte ich dynamisch allokieren, weil ich vorher nicht weiß, wie viel rein soll. Nur ich weiß nicht genau wie das mit dem Zugriff und der Speicherverwaltung genau läuft.
    So ists gedacht: http://imageshack.us/photo/my-images/7/unbenanntpst.png/

    Sollte ich void-Pointer benutzen oder int-Pointer (im die Speicheradressen zu halten) oder was ganz anderes?

    Brauche ich für das Array einen void**-Typ oder benutzt man einen void*?

    Ich möchte jetzt das worauf val zeigt im array an letzter stelle setzen (die letzte stelle soll auch dorthin zeigen). Wie mach ich das?

    Wenn ich free() benutze auf arr wird kein deepclear gemacht oder? Ich muss zunächst alle Elemente des Arrays durchlaufen und free für jedes Element machen, damit die Datenstruktur + Inhalt freigegeben werden, richtig?

    Danke für eure Erklärungen


  • Mod

    Lern Laufen, bevor du rennst! Wenn du solche Fragen stellen musst, dann bist du einfach noch nicht so weit, selbstständig eine generische Datenstruktur zu programmieren. Erweitere Schritt für Schritt deine Kenntnisse. Schreib erst einmal verschiedene Datenstrukturen für einen festen Typen, sagen wir int. Ein dynamisches Array, eine verkettete Liste, eine Baumstruktur. Gründlich testen! Vielleicht auch mal hier zeigen für Feedback, denn man kann sehr vieles so machen, dass es zwar funktioniert, aber nicht sehr gut designt ist.
    Zweites Thema: Benutzen generischer Funktionen. Zum Beispiel mal eine Liste von Zeichenketten alphabetisch rückwärts sortieren mit qsort aus der Standardbibliothek. Dann mal selber Funktionen in dieser Art schreiben. Meinetwegen einfach qsort nachprogrammieren. Wieder gründlich testen.
    Wenn du beides kannst, dann sollte die generische Datenstruktur ganz von alleine gehen.



  • EpicFail schrieb:

    Hey

    ho

    EpicFail schrieb:

    Ich möchte eine generische Datenstruktur erstellen. Quasi ein Zeiger-Array auf beliebige Datentypen. Das Array möchte ich dynamisch allokieren, weil ich vorher nicht weiß, wie viel rein soll. Nur ich weiß nicht genau wie das mit dem Zugriff und der Speicherverwaltung genau läuft.
    Sollte ich void-Pointer benutzen oder int-Pointer (im die Speicheradressen zu halten) oder was ganz anderes?
    Brauche ich für das Array einen void**-Typ oder benutzt man einen void*?

    void** objects;
    

    das wäre der einfachste fall.
    diesen typen würde man in einer struktur einbetten, zusammen mit aktuellem index des zeiger(array)s, anzahl der elemente, anzahl freier elemente.

    EpicFail schrieb:

    Ich möchte jetzt das worauf val zeigt im array an letzter stelle setzen (die letzte stelle soll auch dorthin zeigen). Wie mach ich das?

    die zeiger swappen.

    void* tmp = objects[x];
    objects[x] = objects[y];
    objects[y] = tmp;
    

    EpicFail schrieb:

    Wenn ich free() benutze auf arr wird kein deepclear gemacht oder?

    Bingo.

    EpicFail schrieb:

    Ich muss zunächst alle Elemente des Arrays durchlaufen und free für jedes Element machen, damit die Datenstruktur + Inhalt freigegeben werden, richtig?

    so im groben ja, wobei die Elemente auch wieder allokierte unterelemente haben können.

    EpicFail schrieb:

    Danke für eure Erklärungen

    nicht dafür.



  • EpicFail schrieb:

    Ich möchte jetzt das worauf val zeigt im array an letzter stelle setzen (die letzte stelle soll auch dorthin zeigen). Wie mach ich das?

    das ist ein wenig schwammig formuliert


Log in to reply