Problem mit Vectoren, die zeiger beinhalten



  • Hallo ich habe ein kleines Problem mit einem Vektor.

    Also folgendes:

    beispielcode

    vector<int*> bla;

    und ich habe jetzt ne funktion

    bool fillVector (int value)
    {
    int tmp = value;
    bla.push_back (&tmp);
    return true;
    }

    dann wird wenn ich später den vektor auslese der Wert verloren gehen, weil nach den Ende der Funktion die Variable tmp zerstört wird und an der adresse, die im vektor gespeichert ist, kein Wert mehr existiert.

    Ich habe es jetzt so gemacht dass ich explizit Speicher mit new allokiere und jetzt geht es auch. Aber ich müsste den Speicher mit free ja auch wieder freigeben aber wo?! Bin ja aus der Funktion und somit aus dem sichtbarkeitsbereich des zeigers raus....

    Gruß Para



  • ... aber du hast die Adresse des allokierten Speichers ja im vector. Kannst ihn also vor clear bzw. destruktor vom vector freigeben



  • Hi,

    dadurch, dass es nur eine normale Variable ist, wird diese mitsamt der Adresse ja am ende der Funktion gelöscht.
    benutze stattdessen einen Pointer, welchem du erstmal einen Speicherbereich, bzw. eine Adresse zuweist und dann erst einen Wert dafür setzt und in der Liste aufnimmst.

    int* pTmp = NULL;
    pTmp = (int*) malloc(4); // oder sizeof(int)
    (*pTmp) = value;
    bla.push_back(pTmp);
    pTmp = NULL; /* Eigentlich nicht wichtig, jedoch sicherheitshalber da, damit der Wert nicht ungewollt geändert werden kann. */
    

    Cu,
    CrystalCoder



  • CrystalCoder schrieb:

    [...]

    int* pTmp = NULL;
    pTmp = (int*) malloc(4); // oder sizeof(int)
    (*pTmp) = value;
    bla.push_back(pTmp);
    

    Schauder. In C++ benutzt man new und delete das aber auch nur, wenn es wirklich nötig ist. Und nötig ist das hier ganz sicher nicht. Warum speichert der Vektor denn überhaupt Zeiger auf int statt simple ints?


Anmelden zum Antworten