Ich habe ein wenig Schwierigkeiten, eine Beispielfunktion zu verstehen, die mein Professor als Beispiel für verknüpfte Listen angegeben hat. Es scheint, dass der zugewiesene Speicher nicht wirklich im Bereich von main liegt. Aber es scheint zu funktionieren. Hier sind die Funktionen Beispiel:Speicherbereich mit verketteten Listenfunktionen
#define NEW(x) (x*)malloc(sizeof(x))
NODE *make_node (void *data) {
NODE *temp;
temp = NEW(NODE);
if (temp != NULL) {
temp->data = data;
temp->next = NULL;
}
return temp;
}
int insert_at_tail(ROOT *r, DATA *d) {
NODE *temp;
temp = make_node(d);
if (temp == NULL) // fail, cannot create new NODE
return -1;
if (r == NULL) {
r = make_root();
if (r == NULL) // fail, cannot create ROOT
return -1;
}
(r->num)++;
if (r->num == 1) { // if previously the list is empty
r->head = r->tail = temp;
}
else {
r->tail->next = temp;
r->tail = temp;
}
return 0;
}
Es scheint mir, dass die Funktion insert_at_tail die make_node Funktion aufruft, die dann einen Speicherplatz in der Funktion insert_at_tail zurückgibt. Aber dieser Speicherort ist in dem Bereich dieser Funktion? Der Speicher wird dann verknüpften Listendaten zugewiesen. Wie kommt es, dass in der Hauptfunktion die Daten der verknüpften Liste immer noch auf diesen Speicher zugreifen können? Ich dachte, Malloc wäre nicht global. Danke fürs Lesen! Hoffentlich kann jemand meiner Verwirrung helfen.
BTW 'r = make_root();' Vielleicht funktioniert das nicht. – BLUEPIXY