Programm findet nach erstellen einer Liste die alte Funktion nicht mehr?
-
Hi,
Wenn ich den untenstehenden Code ausführe, dann bekomme ich einen Speicheraddressierungsfehler, der für mich so Aussieht, also wüsste das Programm die nächste Funktion nicht (Compiler schreibt : "IN ??? () ()").struct MyOwnList { char Typ[10]; MyOwnList *next; bool last; }; MyOwnList *FirstPointInList = NULL; MyOwnList *buffer = NULL; //ganz viel toller Code //irgendwann kommt der Aufruf(passiert öfters)... void DataFound(char *DataName) { char Typ[10] = {'\0'}; //Dateityp finden DataTyp(DataName,Typ); //Dateityp neu? if (NewDataTyp(Typ) == true) { MyOwnList *temp = new MyOwnList; CopyString(temp->Typ,Typ); temp->next = temp; //letzten Eintrag auf sich selber Zeigen lassen.... temp->last = true; //Makieren welcher Eintrag nun der letzte ist if (FirstPointInList == NULL) FirstPointInList = temp; //Beim ersten durchlauf den ersten Knoten festlegen else { buffer->next = temp; //Wenn nicht den Next des alten Knotens auf den neuen Knoten zeigen lassen buffer->last = false; } buffer = temp; //Adresse des Knotens für nächsten Durchlauf speichern... } } //weitere Funktion... //Programmende/Kette killnIrgendwo muss es ja mit der Speicheradressierung zusammenhängen, doch was mache ich falsch?
An den verschiedenen Funktion kann es nicht liegen, die werden korrekt ausgeführt, nur beim Verlassen von DataFound() gibt es stress.Danke schonmal
p.s. Ich weiss, dank "bool last" im struct müsste ich den Knoten nicht immer auf sich zeigen lassen...
Wens interessiert, die Funtkion wird rekursiv aufgerufen (Fehler tritt schon beim ersten Aufruf auf..) und soll halt dann was machen, wenn eine Datei gefunden wurde und falss die Endung neu ist, das Ganze speichern.
-
Pille456 schrieb:
...nur beim Verlassen von DataFound() gibt es stress.
das passiert meistens, wenn irgendwas die rücksprungadresse auf dem stack zerbröselt hat...
-
Hmm gut ok, wie weiss ich nun was diese zerbröselt hat und warum ?

-
Pille456 schrieb:
Hmm gut ok, wie weiss ich nun was diese zerbröselt hat und warum ?

du könntest z.b. durch die funktion single-steppen und dabei den stack-pointer und den stack-inhalt im auge behalten...