Problem mit Zeiger



  • Hallo,

    die Funktion create_tree(integer) erzeugt im folgenden Beispiel einen Baum und gibt diesen zurück. Der Inhalt dieser Funktion ist teilweise randomisiert, sodass bei jedem Aufruf von create_tree() ein anderer Baum erzeugt wird.

    struct tree *baum1 = create_tree(size);
    

    Nun möchte ich mit create_tree() zwei Bäume (baum1 und baum2) erstellen, die genau gleich sind. Es soll kein Zeiger vom einen Baum auf den anderen sein, sondern eine Kopie.

    Mit folgender Zuweisung würde ich einen Zeiger von baum2 auf baum1 erhalten und hätte quasi nur EINEN Baum erzeugt.

    struct tree *baum2 = baum1;
    

    Wie kann ich möglichst einfach einen zweiten Baum mit gleicher Struktur (nur einmaligem Aufruf von create_tree() ) erzeugen?

    Danke!!

    PS: Die Funktion create_tree() möchte ich dazu nach Möglichkeit nicht ändern, da sie Bestandteil einer hierzu verwendeten Bibliothek ist.



  • Mit einer Funktion struct tree * copy_tree(struct tree const * other) vielleicht?



  • Tachyon schrieb:

    Mit einer Funktion struct tree * copy_tree(struct tree const * other) vielleicht?

    OK, ich hatte gedacht/gehofft, dass es für sowas vielleicht eine Art copy Funktion gibt 🙄



  • Wie soll es die geben? Sofern Dein Tree-Dingens nicht zusammenhängend im Speicher liegt, kann keine Funktion wissen, wie eine tiefe Kopie zu erstellen ist. Sollte er doch zusammenhängend im Speicher liegen, dann kannste das mit memcpy machen.



  • Oder anders gesagt, falls deine geheimnisvolle struct tree Zeiger enthält, benötigst du eine Funktion deepcopy, welche ungleich aufwändiger ist als ein simples copy.


Anmelden zum Antworten