statisch allokierten Speicher wieder freigeben...



  • Hi, gibt es eine Möglichkeit statisch allokierten Speicher eines C-String zu re-allokieren, um die Größe anzupassen ? (Ich kann die Klasse std::string nicht verwenden!)



  • Nein, dies ist nicht möglich. Wenn du schon std::string nicht verwenden kannst, könntest du dann den C-String dynamisch allokieren? Auch nicht, oder?



  • Hi,

    Ja das hab ich mit folgender Zeile versucht, aber dabei stürzt er ab:
    static char* pszData = new char[213];

    Wenn ich dann mit
    delete [] pszData;
    bzw.
    pszData = new char[1000];
    reallokiere, krackt es.

    Danke schonmal!



  • ist das ne globale variable und wird sie irgendwie im konstruktor von anderen globalen objekten verwendet? dann könnte es sein, daß das andere objet *vor* deinem speicher angelegt wird.



  • Hm ne...aber theoretisch kann ich also einen Zeiger den ich so definiert hab:
    static char* pszData;

    so oft neu allokieren wie ich will (erst delete [] danach new char[] ) , oder ?



  • Del schrieb:

    Hm ne...aber theoretisch kann ich also einen Zeiger den ich so definiert hab:
    static char* pszData;
    so oft neu allokieren wie ich will (erst delete [] danach new char[] ) , oder ?

    jup.



  • Allerdings solltest du beachten, daß bei dieser Aktion die bisher vorhandenen Daten nicht kopiert werden (und leider bietet C++ auch kein Äquivalent zu realloc() an). Wenn du die Daten noch brauchst, mußt du sie vorher umkopieren:

    char* tmp = new char[new_size];
    memcpy(tmp,pszData,min(old_size,new_size));
    delete[]pszData;
    pszData=tmp;
    

Anmelden zum Antworten