Größe dynamisches Array



  • Hallo!

    Wie bekomm ich im nachhinein die Größe eines dynamischen Arrays heraus?

    Bsp.:

    double *values = new double[6];
    
    int size = getSizeof(values*);
    

    Wie muss getSizeof implementiert werden, damit 6 zurückkommt?

    Danke für Tipps!

    mfg,
    Lemmy



  • Darauf wirst Du keine Antwort bekommen, es geht nämlich nicht 😉



  • Das hab ich fast befürchtet 😉

    Gibt es vl. irgendeine Möglichkeit, das zu umgehen?



  • benutze einen vector

    #include<vector>
    
    using namespace std;
    
    ...
    
    vector<double> vec(6);
    int size = vec.size();
    


  • Ja, benutze std::vector. Gibts genug Threads dazu und jedes C++-Buch sollte das drin haben.



  • das geht aus dem Grund nicht, weil dazu ein zusätzliches attribut im Speicher vorhanden sein müsste, welches die Größe speichert. Aber in C++ möchte man dem Programmierer selbst überlassen, ob und wie er seine attribute speichert. Entweder du kümmerst selbst darum, dass die größe zusätzlich zum pointer immer mit übergeben wird, oder du machst es wie bei char*, indem du hinten immer ein null-Pointer einbaust (geht nur, wenn du die werte nicht direkt ins array schreibst, sondern immer deren adressen), oder du verwendest wie gesagt ein vector. Die wahl steht dir offen.


  • Mod

    Krux schrieb:

    das geht aus dem Grund nicht, weil dazu ein zusätzliches attribut im Speicher vorhanden sein müsste, welches die Größe speichert. Aber in C++ möchte man dem Programmierer selbst überlassen, ob und wie er seine attribute speichert. Entweder du kümmerst selbst darum, dass die größe zusätzlich zum pointer immer mit übergeben wird, oder du machst es wie bei char*, indem du hinten immer ein null-Pointer einbaust, oder du verwendest wie gesagt ein vector. Die wahl steht dir offen.

    Ganz genau ist die Begründung nicht. Schließlich muss ja delete [] in der Lage sein, die korrekte Anzahl der Objekte zu ermitteln, um sie zerstören zu können. Allerdings schreibt der Standard dafür keinen Mechanismus vor (und für Objekte mit trivialem Destruktor könnte eine Implementation auch darauf verzichten).


Anmelden zum Antworten