Unbehandelte Ausnahme abfangen



  • Hi und Hallo,

    ich habe ein Problem bei der Verwendung von Threads, die über Pointer auch Variablen des Hauptprogramms verwenden.

    Wenn das Programm beendet werden soll, werden vorher Variablen freigegeben, die jedoch auch im Thread mit verwendet werden. Da der Thread auch blockierende Befehle (z.B. Connect) verwendet und sich somit der Thread nicht selbst beenden kann, ich andererseits aber auch nicht so lange warten möchte, bis diese Befehle zurückkehren, beende ich trotzdem das Hauptprogramm und lasse die Threads dann einfach "runterfallen", wenn sie die blockierende Befehle beendet haben.

    Ist nur so eine Idee, die ich halt umsetzen möchte. Dabei stieß ich auf die Schwierigkeit, Variablen im Thread auf ihre Validität zu überprüfen. Löscht man z.B. einen Pointer per free oder delete im Hauptprogramm, beinhalten die Pointer hinterher ja nicht NULL, sondern sind einfach undefiniert. Zwar weise ich nach dem Löschen der Pointer diesen auch gleich NULL zu, doch ab und zu knallt mir eben genau zwischen diesen beiden Aktionen (Pointer freigeben und NULL zuweisen) der Thread mit einer unbehandelte Ausnahme dazwischen.

    Meine Frage: wie kann man prüfen, ob ein Pointer einen gültigen Wert beinhaltet also valid ist bzw. wie kann ich solche unbehandelten Ausnahmen abfangen? Hab inzwischen viel mit try-catch rumprobiert, aber Zugriffe auf ungültige Pointer habe ich einfach nicht abfangen können.

    Hat da jemand eine Idee, wie man das bewerkstelligen kann?



  • Eine wirklich saubere Lösung hab ich nicht aber ich würd versuchen der Variable vor dem löschen einen Wert zuzuweisen um das Problem zu umgehen.
    ungefähr so:

    int *dd = new int;
    		*dd = -1;
    		if(dd != NULL && &dd >0)
    		{
    		}
    


  • ????

    ...ähm - und was soll das bringen?



  • Da hast du allerdings recht. Das bringt gar nix.
    Die Idee dahinter war einfach, dem Programm mitzuteilen, demnächst diesen Speicherplatz freizugeben. Sozusagen einen Merker, daß der Zugriff demnächst nicht mehr möglich ist.
    Die von mir gepostete Ausführung ist allerdings totaler Quatsch.

    Ich sollte mich vielleicht mit dem nick registrieren.



  • Das Mitteilen mache ich bereits, doch nützt das nix, weil im Thread ja eine blockierende Aktion läuft und dort somit davon nix mitbekommen wird.


Anmelden zum Antworten