grundlegendes Problem mit dynamischen Arrays



  • Hi Ihr!
    Ich hab hier einen riesigen Code (Kot?) geerbt. Es geht um ein Messprogramm, das bei jedem Aufruf 100000 Punkte aus der Messkarte ausliest, obwohl der Benutzer meistens viel weniger will. Also wollte ich das Array, das ich der Karte (zum Auffüllen mit Messwerten) übergebe, dynamisch machen, damit ich nicht unnötig Daten hin- und herschaufel (wenn jemand eine elegantere Idee hat, bin ich für Alles offen). Im Klassenheader meiner Karte war ein

    ViChar WaveForm[100000];
    

    definiert, das ich jetzt als

    ViChar *WaveForm;
    

    umgeschrieben habe. Im Konstruktor OnInitDialog() meiner Klasse steht jetzt ein

    WaveForm = new ViChar[0];
    

    Weil ich das Gefühl hatte, dass mein array überhaupt nicht angelegt wird, habe ich um den eigentlichen Messvorgang herum ein paar Blöcke

    if (WaveForm) {
       long Speicherplatz = sizeof(WaveForm);
       long Groesse = Speicherplatz / sizeof(WaveForm[0]);
    }
    

    verteilt, und in denen sehe ich in der Variablenüberwachung mein Problem: egal, wie oft ich

    delete[] WaveForm;
    WaveForm = new ViChar[nbrSamples];
    

    aufrufe, immer nehmen Speicherplatz *und* Groesse eine 4 an (nbrSamples ist 30).

    Was mach ich da denn grundsätzlich verkehrt? Ich hab kaum Ahnung von Arbeit mit pointern, also schlagt ruhig das Naheliegendste vor. Kann es sein, dass ich mit sizeof(WaveForm) nur die Größe des *Pointers* auf mein array abfrage?
    Besten Dank!
    Rufus



  • So ist es, du bekommst die Größe des Zeigers zurück.
    Nachdem du speicher dynamisch allokiert hast musst du dir die Größe selbst merken (z.B. Variable). Ansonsten kannst du hinterher nichtmehr feststellen wieviel Speicher du allokiert hast.
    new wirft im Normalfall übrigens eine Exception, falls nicht genügend Speicher allokiert werdne konnte.


Log in to reply