Testen ob Objekt hinter Zeiger existiert?



  • Original erstellt von DrGreenthumb:
    **CObject *m_pObj;

    Damit zeigt m_pObj in's Nirvana. Du musst schon auf 0 setzen. Was spricht denn dagen?**

    Welchen Wert hat der Zeiger nach

    delete m_pObj;

    ?? Garantiert NULL oder muss er auch nochmal explizit auf NULL zurückgesetzt werden?

    Stefan



  • muss nicht mehr getestet werden



  • versuchs doch mit einem try / catch. ob das allerdings immer funktioniert, ist die frage



  • delete m_pObj;

    ?? Garantiert NULL oder muss er auch nochmal explizit auf NULL zurückgesetzt werden?

    Muss extra auf 0 gesetzt werden.

    versuchs doch mit einem try / catch. ob das allerdings immer funktioniert, ist die frage

    😕



  • Hab mal ne DLL geschrieben. Da bekommt der Client ein Handle auf ne Klasse. Diese Klasse muss mit ner Funktion explizit vom Client instanziiert werden.

    Nachdem meine Benutzer x mal das Teil nicht instanziiert hatten und immer mit komischen Fehlermeldungen kamen hab ich ne int-Membervariable in meine Klasse reingemacht. Der Ctor hat sie auf irgendnen Wert gesetzt (nicht 0 und nicht FFFFFFFF).
    Jetzt wird jedesmal, wenn ne Methode der Klasse aufgerufen wird, geprüft, ob sie diesen Wert hat. Die Cance, dass sie den Wert hat, obwohl sie nicht instanziiert wurde is ziehmlich gering.
    Willst Du das auch im Release haben sollte das Teil aber volatile sein, sonst optimierts Dir der Compiler weg und Du hast den gewünschten Effekt nicht.

    Man darf sich aber wohl drüber streiten, ob das eine elegante Technik ist, wenn's in der Release-Version drin ist. Aber für den Debug-Modus is das in Verbindung mit ner Assertion ganz nützlich.



  • hat nicht funktioniert 😞



  • Knuddlbaer schrieb:

    NULL ist das was Dir bleibt.
    Alles andere ist OS / Compilerspezifisch.

    Sagen wir eher undefiniertes Verhalten.

    @Stefan
    Zeiger werden bei ihrer Instanzierung entweder mit einer gültigen Verweis oder mit Null initialisiert. Darum hast DU dich zu kümmern. Sofern der Zeiger statische Lebensdauer hat, wird diesem ohne explizite Initialisierung Null zugewiesen.
    Wenn du jetzt wissen willst, ob der Zeiger auf etwas Gültiges zeigt, dann fragst du diesen einfach auf Null ab. Mehr gibts dazu eigentlich nicht zu sagen. Und irgendwelche Hilfsvariablen oder krummen Werte sind absolut überflüssig.



  • Korbinian schrieb:

    versuchs doch mit einem try / catch. ob das allerdings immer funktioniert, ist die frage

    Naja einen Segfault fängt das auch nicht ab. 🙄



  • Stefan, am 17.03.2003, schrieb:

    ...



  • Hehe, man sollte doch bei solchen Unreg Trollen immer auf's Datum schauen.



  • oh ja *g*



  • kann das nicht auch wirklich passieren das man sich nach 2 - 3 jahren wieder zurückmeldet??



  • hmmmmmmmmm schrieb:

    kann das nicht auch wirklich passieren das man sich nach 2 - 3 jahren wieder zurückmeldet??

    In letzter Zeit kommen aber viele nach Jahren wieder zurück. ( und alle auf einmal ).
    K


Anmelden zum Antworten