Struct/Knoten/deleteKnoten
-
Hallo...
versuche mal mein Problem zu erklären.
Also: das Programm ist ein allgemeines Graphen Programm. Jeder Graph besteht aus Knoten die durch Kanten verbunden werden können...Zum Problem:
die Knoten werden in einer Art Liste angelegt. Will jetzt einen Knoten löschen(da ich ja keinen wirklichen Garbage Collector hab).Hab aber irgendwie nur Zeiger, und der Funktion wird ja auch nur ein Zeiger übergeben....
Hier die Funktion zum Knoten löschen:void deleteKnoten(const char *Name,Graph *pGraph)
{Knoten *pVorgaenger;
Knoten *b=pGraph->pFirstKnoten;//b zeigt auf ersten Knoten des Graphen
pVorgaenger=pGraph->pFirstKnoten;if(strcmp(b->pName,Name)==0)//prüft ob erster Knoten der Liste gelöscht werden soll
{
pVorgaenger=pGraph->pFirstKnoten->pNext;
pGraph->pFirstKnoten=pVorgaenger;}
else
{
for(;strcmp(b->pName,Name);b=b->pNext)//anderer Knoten der Liste soll gelöscht werdenpVorgaenger=b;
pVorgaenger->pNext=b->pNext;
}
}Hier noch die Struktur Knoten:
struct Knoten
{
const char *pName;
Knoten *pNext;};
Hoffe jemand kann mir helfen...
Danke
Sascha
-
Hmmm, beschreib doch dein Problem bitte etwas näher.
Wo genau hast du Probleme,
verursachen diese irgendwelche Übersetzungsfehler
oder stürzt das Programm ab???
-
Das Programm stürzt nicht ab.Es läuft problemlos. Momentan lösche ich den Knoten indem ich einfach in der "Knoten-Liste" die Zeiger umpole..... In Wirklichkeit ist aber der Knoten auf dem Heap ja noch angelegt.Und den Speicher-Platz will ich irgendwie freigeben. Wenn ich in meinem Programm (in der Funktion) z.B delete b; mache löscht er mir ja nur den Zeiger auf das Objekt und nicht das Objekt selbst...
-
sasch schrieb:
Wenn ich in meinem Programm (in der Funktion) z.B delete b; mache löscht er mir ja nur den Zeiger auf das Objekt und nicht das Objekt selbst...
Nein, wenn du
delete b;
aufrufst wird der Speicherplatz auf dem Heap auf den "b" zeigt freigegeben, delete löscht keine Zeiger!
-
achso...na dann hat sich mein Problem ja schon gelöst...
Danke
Sascha
-
Gern geschehen