Unkontrollierte\ungewollte Pointer deklaration



  • Hi Leute,
    ich habe ein Problem mit meiner doppelt verketteten Liste. Anfügen und bearbeiten ist alles kein Ding, aber in einem Fall schreibt das Programm den vorgaenger-Pointer des allerersten Objektes von Null auf irgendeine andere idiotische Adresse um.
    Also diesen Pointer:
    falsch<-Objekt-><-Objekt->Null

    Alle anderen Pointer sitzen völlig korrekt.
    Nun tritt dieser Fall nur ein, wenn der Benutzer "Starten" drückt, die Verarbeitung beginnt (die liste wird nicht verändert, sie wird nur rumgeschoben) und beendet. Möchte man nun darauffolgend Einstellungen in der Liste ändern, versucht er noch richtig die Lister herunterzuzaehlen...

    while(liste->vorgaenger != NULL) 
       liste = liste->vorgaenger;
    

    Da aber der Pointer des ersten Objektes auf eine falsche Adresse zeigt, wirft das Programm irgendwann einen Fehler aus.

    So, ich hoffe ihr versteht mein Problem. Viel code konnte ich nicht zeigen, wird nichts bringen. Habe alles durchgetestet. Der Code selber verändert nichts mehr an Pointern.
    Vielleicht liegt es daran das die Liste public ist und ich sie bei der "Verarbeitung" in einer anderen Klasse verwende?

    Jede Antwort hilft, helft :).
    Gruß icestar

    /////////////
    UPDATE
    /////////////

    Habe gerade herausgefunden das es an dem Aufruf einer Form liegt. Wie mir mal zu Ohren gekommen ist sollte man keine manuelle Instanz für eine Form anlegen.
    Habe ich gemacht und tatsächlich sind die Pointer nun alle i.O.
    Hier mal der Code mit den nun auskommentierten Zeilen

    //Optionen = new TOptionen(Application);
    
    	if (Optionen->ShowModal() == ID_OK)
    	{
    		ListeRunterZaehlen();
    		VariablenDerListeZuordnen(Anker);
    		ListeAktualisieren();
    	}
    
    //Optionen->Hide();
    //delete Optionen;
    

    Die Form habe ich zu den automatisch zuerstellenden Forms in den Optionen hinzugefügt. Mir ist nur noch nicht ganz klar, warum das so besser ist.
    Achja außerdem öffnet sich die Form bei mir beim zweiten mal plötzlich und ohne den typischen vista-schwung (ja ich habe vista). Kann man das irgendwie noch anders schließen als Hide?


Anmelden zum Antworten