[SOLVED] Kann man heraus finden ob ein pointer "deleted" wurde?



  • Hallo!

    Wie findet man heraus, ob ein Speicherbereich auf den ein Pointer zeigt schon wieder freigegeben wurde?

    Object *pt;
    pt = new Object();
    
    delete pt;
    
    if(pt???) // wie finde ich heraus, ob der speicher auf den pt zeigt deleted wurde?
      pt = newObject();
    

    Grosses Danke im Voraus!!

    marcel



  • Nach dem du den Poiter deleted hast, setzt du ihn auf NULL. Dann kannst du ihn prüfen ob er NULL ist, wenn ja, dann ist gelöscht.



  • adsci schrieb:

    Wie findet man heraus, ob ein Speicherbereich auf den ein Pointer zeigt schon wieder freigegeben wurde?

    Gar nicht. (Jedenfalls nicht mit Standard-C++-Mitteln)

    Artchi schrieb:

    Nach dem du den Poiter deleted hast, setzt du ihn auf NULL. Dann kannst du ihn prüfen ob er NULL ist, wenn ja, dann ist gelöscht.

    Aber nur, wenn es nur den einen Pointer auf diesen Speicherbereich gibt.



  • Artchi schrieb:

    Nach dem du den Poiter deleted hast, setzt du ihn auf NULL. Dann kannst du ihn prüfen ob er NULL ist, wenn ja, dann ist gelöscht.

    mmh ja, mein üblicher ansatz.
    leider kann ich das in diesem fall nicht machen, da eine library den pointer unter umständen löscht.

    in meinem konkreten fall ist in dem speicherbereich ein bitmap abgelegt. wenn ich bei der libraryfunktion die das bitmap nutzt nicht explizit angebe, dass der bereich NICHT gelöscht werden soll löscht es den bereich einfach. das ist sehr schwer zu debuggen.

    daher wollte ich in dem fall das bitmap neu laden und im log eine warnung ablegen, um das debuggen zu erleichtern.

    ist das überhaupt möglich?



  • Bashar schrieb:

    Gar nicht. (Jedenfalls nicht mit Standard-C++-Mitteln)

    das ist ätzend 👎

    naja, danke auf jeden fall 🙂



  • [quote]

    in meinem konkreten fall ist in dem speicherbereich ein bitmap abgelegt. wenn ich bei der libraryfunktion die das bitmap nutzt nicht explizit angebe, dass der bereich NICHT gelöscht werden soll löscht es den bereich einfach. das ist sehr schwer zu debuggen
    [/quote}

    Warum übergibtst du dann diesen "nodelete" parameter nicht ??

    rya.
    Scorcher24



  • [quote="Scorcher24"]

    in meinem konkreten fall ist in dem speicherbereich ein bitmap abgelegt. wenn ich bei der libraryfunktion die das bitmap nutzt nicht explizit angebe, dass der bereich NICHT gelöscht werden soll löscht es den bereich einfach. das ist sehr schwer zu debuggen
    [/quote}

    Warum übergibtst du dann diesen "nodelete" parameter nicht ??

    rya.
    Scorcher24

    mach ich doch 🙂
    es ging mir darum eine möglichkeit zu haben diese art fehler leicht aufzuspüren, da die anwendung nicht gerade klein ist und der parameter nicht im konstruktor übergeben wird, sondern optional mit einem methodenaufruf nachgereicht wird. das ist daher leicht zu vergessen und habe schon mal nen halben tag verbracht um heraus zu finden, warum das programm einfach abstürzt.

    so könnte ich im log sehen, ob im programm noch solche fehler sind und selbst wenn sie auftreten müsste das programm nicht gleich abstürzen. ich kann so keinerlei fehlerbehandlung an dieser stelle durchführen. ausserdem arbeitet nicht nur diese methode auf den bitmap daten sondern auch etliche andere, von denen ich noch nicht 100%ig weiss was die damit anstellen.

    gruß
    marcel


Anmelden zum Antworten