Wie malloc eine Struktur, die in einer anderen Struktur ist?
Ich möchte auch ein Array von Elementen in einer Struktur malloc machen und dann dieses Array bei Bedarf neu zuweisen, wie wird das richtig gemacht?
Könnten Sie bitte ein Beispiel geben, eine Struktur zu deklarieren und dann das obige.
Ich bin ein wenig unsicher über die Reihenfolge der Dinge.
Würde das Array innerhalb einer Struktur freigegeben und dann die Struktur selbst, muss die Struktur beim Erstellen malloced sein und dann ihre Felder malloced / deklariert usw.?
Ein struct
in einem anderen struct
ist in der Kopie enthalten, so dass Sie es nicht separat malloc hinzufügen müssen. Wenn das struct
einen Zeiger auf ein anderes struct
enthält, können Sie in Erwägung ziehen, dynamisch Speicher dafür zuzuweisen.
In struct Rect
wird das struct Point2D
-Element in struct Rect
eingefügt und Sie müssen nicht dynamisch Speicher für sie reservieren. Im Gegenteil, in struct LinkedListNode
wird das nächste Element durch einen Zeiger referenziert und der Speicher muss dynamisch zugewiesen werden.
Die beiden Versionen sind je nach Situation nützlich. Es gibt keine korrekte Möglichkeit, Speicher zu verwalten, es hängt von Ihrer Verwendung ab.
Dieselbe Situation tritt bei einem Array auf. Wenn Ihr Array statisch ist, kann es direkt in struct
eingefügt werden. Wenn die Größe jedoch variieren kann, müssen Sie einen Zeiger in struct
speichern.
Die realloc
-Funktion führt nur eine flache Kopie durch, dh der Zeigerwert wird kopiert, aber nicht das spitze Objekt. Noch einmal, wie Sie damit umgehen, hängt von Ihrer Anwendung ab.
Das folgende Beispiel zeigt verschachtelte Strukturen und Arrays in Strukturen. Sie werden feststellen, wie die verschachtelten Elemente behandelt werden müssen, bevor Sie free
der äußeren Struktur zugewiesen haben, sonst haben Sie ein Speicherleck.
Es ist nicht gut lesbar, aber manchmal erstellen Benutzer eine Struktur mit einem Zählelement und einem letzten Einzelelementarrayelement. Es gibt dann eine spezielle Factory-Methode, die genügend Speicherplatz zur Verfügung stellt, so dass Sie schreiben können, um Elemente im Array zu zählen. Offensichtlich kann das Array-Element von jedem Typ sein.
%Vor%Um ein einzelnes B zu erhalten:
%Vor%Um ein Array von B zu erhalten:
%Vor%