größe eines arrays

Pherseus

Erfahrenes Mitglied
Hi, ich möchte die größe eines Arrays bestimmen, bekomme das aber nicht wirklich hin.

Das ganze sieht so hier aus:

Code:
 Fraction *  FrArr;
 FrArr = new Fraction[3];
 FrArr[0].setValues(1);
 FrArr[1].setValues(1);
 FrArr[2].setValues(1);
 count = sizeof(*FrArr)/sizeof(FrArr[0]);

Fraction ist dabei eine klasse. Eigentlisch sollte da ja jetzt drei rauskommen. Ich bekomm aber die ganze zeit 1.
 
Das da 1 rauskommt ist klar, da Du die Größe des erten Elementes durch die Größe des ersten elementes teilst (beide Konstrukte - *FrArr und FrArr[0] - geben den Inhalt des ersten Elementes zurück).
In C/C++ gibt es leider keine Möglichkeit, die Größe eines Arrays im Nachhinein zu bestimmen. Du mußt Dir die Größe nach dem Anlegen bzw. nach jedem realloc in einer Variablen merken.
 
Hi.

Du irrst dich, da muß immer 1 rauskommen.

Aus dem einfachen Grund weil FrArr[0] genau das gleiche ist wie *FrArr. Beide Ausdrücke bezeichnen ein einzelnes Fraction Objekt. Egal wie groß das nun ist, eine Zahl durch sich selbst geteilt ergibt immer 1 (mal abgesehen von 0).

Desweiteren kannst du den sizeof Operator nicht benutzen um die Größe eine dynamisch angelegten Arrays zur Laufzeit zu bestimmen. Die Arraygröße muß sich der Programmierer schön selbst in einer Variable speichern. Der sizeof Operator ermittelt statisch zur Kompilierzeit die Größe von Variablen oder Typen - zur Laufzeit gibt es keine Möglichkeit dies zu tun.

Am allerbesten wäre es wenn du einfach einen vector nimmst. Der ist getestet, kann dynamisch die Größe ändern, du mußt dich nicht mit Speicher-Allozierung herumschlagen und er funktioniert im Grunde genauso wie ein Array auch.

Gruß
 
Zurück