Malloc von Arrays und Strukturen innerhalb einer Struktur

8

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.?

    
jarryd 28.03.2011, 22:24
quelle

5 Antworten

8

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.

%Vor%

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.

%Vor%

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.

    
Sylvain Defresne 28.03.2011, 22:33
quelle
1
%Vor%     
Nick Banks 28.03.2011 22:32
quelle
1

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.

%Vor%     
Tim Cooper 28.03.2011 22:33
quelle
1

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%     
Neil 28.03.2011 23:14
quelle
1
%Vor%

Um ein einzelnes B zu erhalten:

%Vor%

Um ein Array von B zu erhalten:

%Vor%     
Richard Schneider 28.03.2011 22:38
quelle

Tags und Links