2017-09-17 1 views
-4

wenn ich einen Knoten in verknüpften Liste definiert habe, stieß ich auf diese Verwirrung. betrachten,Struktur Speicherzuweisung und malloc() in c

struct node *current = head; 

hier head Zeiger Knoten zu leiten. und eine andere Art und Weise ist,

struct node *current = (struct node*)malloc(Sizeof(struct node)); 
current = head; 

beide Werke gleich, so was ist der Unterschied zwischen ihnen? Wie wird Speicher im ersten Fall zugewiesen?

+1

Kein Speicher wird im ersten Fall zugewiesen. Speicher, der im zweiten Fall zugewiesen wurde, ist durchgesickert. Sie sollten lernen, was _pointer_ ist, und was getan wird, wenn Sie _assign_. – myaut

+0

was passiert dann im ersten Fall, was ist aktuell? –

+0

Bitte machen Sie eine [mcve], oder zeigen Sie zumindest die Deklaration/Definition/Initialisierung von "Kopf". – Yunnosch

Antwort

3

Der Unterschied ist, dass die zweite Version malloc(sizeof(struct node)) aufruft und den zurückgegebenen Zeiger verliert; d.h. es ist ein Speicherleck. Sie können den gleichen Effekt wie folgt erhalten:

malloc(sizeof(struct node)); 
struct node *current = head;