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.


Log in to reply