pointer ausfindig machen



  • vorerst Hallo miteinander! 😃
    ich lerne seit 2 Monaten c++, bin grad dran n Stack zu programmieren. Da habe ich noch Fragen zur Theorie:
    1. ich habe ausserhalb von main ne funktion deklariert, die einen dynamischen Array erzeugt. Wo muss ich den deleten? Am ende der Funktion,oder am schluss von main?

    2. wi kann ich pointer,die auf einem gelöschten pointer zeigen ausfindig machen? kann man die mitem Befehl deleten?
    z.B. int *arr = new int;
    delete [] arr;
    ich möchte alle pointer, die auf arr zeigen ebenfalls weg haben.

    danke im voraus!



  • 1. das array solltest du löschen, sobald du es nicht mehr brauchst ...
    rausfinden musst schon du, wenns an der zeit ist, fuer das array zu gehn...

    2. ein pointer der auf einen gelöschten pointer zeigt... hmmm ...
    auch dazu ist mein rat, arbeite dich schrittweise durch dein programm, dass
    soetwas nicht passieren kann.



  • Hamada schrieb:

    1. ich habe ausserhalb von main ne funktion deklariert, die einen dynamischen Array erzeugt. Wo muss ich den deleten? Am ende der Funktion,oder am schluss von main?

    Spätestens am Ende von main. Aber generell ist es keine gute Idee, einer freien Funktion das Erzeugen dynamischer Daten zu überlassen. Entweder werden diese innerhalb einer Klasse gehandelt, dann ist der Destruktor für die Freigabe der Ressourcen zuständig. Oder sie werden innerhalb einer Schnittstelle benötigt, dann bedient man sich spezieller Techniken, wie zB das Factory Pattern. Clients sollten möglichst transparent vom Ressourcenmanagement bedient werden. Sofern du das dynamische Array auch nur in der Funktion brauchst, kann es natürlich auch am Ende der Funktion gelöscht werden. Sinnvoller wäre allerdings, statt dem selbst erzeugten dynamischen Array lieber einen fertigen Container zu verwenden. Ua auch weil diese exceptions-safe sind.

    Hamada schrieb:

    2. wi kann ich pointer,die auf einem gelöschten pointer zeigen ausfindig machen?

    Gar nicht. Damit in so einem Fall keine Zeigerleichen entstehen, verwendet man zB Shared Smart Pointer, die über Reference Counting selber wissen, wann es keine Zeiger mehr gibt, die auf einen bestimmten Speicherbereich zeigen und diesen dann freigeben. Imo sollte man vorher aber zweimal überlegen, ob dies wirklich erforderlich ist oder sich nicht irgendwie einfacher lösen lässt.

    btw:
    Bei deinem Beispiel unter 2. handelt es sich übrigens nicht um ein Array, daher ist delete[] nicht korrekt. Es muss nur delete heissen.


Anmelden zum Antworten