Forum: Mikrocontroller und Digitale Elektronik Probleme mit Funktion in C


von user (Gast)


Lesenswert?

Hallo,

bei der folgenden Funktion sieht der C Compiler einen Fehler.
--> error: dereferencing pointer to incomplete type
1
void*  DeleteNode(node list)
2
{
3
  node tmp   = list->next;
4
  list->next = list->next->next; <-- Der Fehler liegt in dieser Zeile
5
  free(tmp);
6
  return list;
7
}

Diese Meldung macht auch Sinn, da das next Element von next noch nicht 
existiert. Allerdings brauche ich diese Funktion um ein Element in einer 
Liste zu löschen.

von Ralf (Gast)


Lesenswert?

Wie ist denn der Typ node definiert?

von Der Andere (Gast)


Lesenswert?

By the way: Ziemlich irreführende Variablennamenwahl.

1. die Variable "list" ist ein Knoten einer Liste. Dann nenn sie 
"element" oder "listNode", aber nicht "list".

2. Und auch der Funktionsnamen ist irreführend, denn du löschst nicht 
den Node, sondern das Element hinter dem übergebenen "node" (node->next

3. Du prüfst nicht ob in node->next überhaupt eine weitere Knoten 
gespeichert ist. Der nächste Absturz ist nicht fern

...

von Hux (Gast)


Lesenswert?

wenn list->next->next nicht existiert dann ist er doch mit NULL 
initialisiert oder.
also list->next = NULL wenn kein weiteres Element in der liste ist und 
es wird list->next->next wen nein weiteres Element da ist.

Du solltest wirklich die node Definition und die Compilermeldung zeigen.
Wenn Zeiger NULL sein können so muss das abgefangen werden sonst gibt es 
einen Crash. Ich denke du hast einen Denkfehler und da passt noch mehr 
nicht.

von Dirk B. (dirkb2)


Lesenswert?

void ist ein incomplete Typ

Der Member next ist wohl ein void*, so wie es auch der Rückgabewert der 
Funktion ahnen läßt.

von Hux (Gast)


Lesenswert?

das glaub ich nicht, der wird nur auf void* gecasted sonst macht das ja 
überhaupt keinen Sinn.

von Peter D. (peda)


Lesenswert?

Codefragen ohne die benötigten Definitionen sind ziemlich sinnlos.
Codefragmente sollten compilierbar sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.