[C++] Grösse eines Arrays herausfinden.

Atlanx

Mitglied
Hallo, ich hab hier ein kleines Problem.

Ich würde gerne die Grösse eines Feldes(Array) wissen, aber das klappt nur ausserhalb meiner Methode.

Also das funktioniert in meinem Hauptprogramm:

Code:
 Type3DPoint bTriangle[3] = {150,0,0, 0,50,0,  0,0,50};

 int c = sizeof(aTriangle)/sizeof(aTriangle[0]); // c ==  3
 int c1 = sizeof(aTriangle);                           // c1 == 72
 int c2 = sizeof(aTriangle[0]);                       // c2 == 24

 Type3DPoly aMy3DPolygon_tmp(aTriangle);

Sobald ich jetzt aber in der Methode (Konstruktor) von Type3DPoly bin,
kann ich die Grösse des Feldes nicht mehr ermitteln:

Code:
//| Initialize a Type3DPoly object from an array of 3DPoints.
Type3DPoly::Type3DPoly(Type3DPoint *Vert) // ctor
// Type3DPoly::Type3DPoly(Type3DPoint Vert[]) // ctor
{
           int a = sizeof(Vert)/sizeof(Vert[0]); // a == 0
           int a1 = sizeof(*Vert);                   // a1 == 24
           int a2 = sizeof(Vert[0]);                 // a2 == 24

Wie erfahre ich die Grösse, ohne diesen Wert(die Grösse) expliziet als Funktionsparameter übergeben zu müssen?

Vielen Dank.
 
moin


z.B. indem du dem letzten Element des Arrays einen bestimmten "Schlusswert" gibst.
Das Problem ist, denke ich, das nach der Übergabe per Pointer kein Ende mehr bekannt ist.


mfg
umbrasaxum
 
Gibt es da denn keinen "anstaendigen" Weg in C++, das herauszufinden.

Das kann es doch eigentlich nicht sein, oder? In anderen Programmiersprachen kann ich doch auch immer feststellen, wie lange mein Feld ist.
 
moin


Spontan fällt mir jetzt keiner ein. Das Thema gab es aber schön öfters, kannst ja mal per Suchfunktion nachforschen ob schonmal jemand nen Lösungsweg genannt hat.
 
Atlanx hat gesagt.:
Gibt es da denn keinen "anstaendigen" Weg in C++, das herauszufinden.
Die Codezeile
Code:
Type3DPoint bTriangle[3] = {150,0,0, 0,50,0,  0,0,50};
reserviert den Speicherbereich lokal auf dem Stack und die Größe kann daher auch mit sizeof ermittelt werden.

Wenn du den als Zeiger an eine andere Funktion übergibst, bekommst du einen Speicherblock mit der Adresse. Ein sizeof liefert dir nur die Größe dieses Speicherblockes (z.B. 4 Byte). Du musst also die Infos zur Größe des Speicherbereiches mit übergeben. Es gibt keine Möglichkeit, das in der Situation herauszufinden.

Die von dir angesprochenen anderen Programmiersprachen verwenden keine Zeiger und haben stattdessen Mechanismen zur Speicherverwaltung (Garbage Collection), so dass Infos über genutzten Speicher besser zugänglich sind.
Die damit verbundenen Performanceeinbußen und der höhere Ressourcenbedarf fällt sicherlich bei PC-Programmen nicht ins Gewicht, disqualifiziert aber solche Sprachen für ein Einsatz etwa bei der Mikrocontroller-Programmierung.
 
Benutze statt normaler Arrays halt Container der STL (vector, list, map ...)
Alles andere ist doch sowieso Schnee von gestern und nicht optimal gelöst.
Da bekommt man auch die Größe etc. leicht heraus.
 
Ich verwende ja die STL in meinen Programmteilen, aber leider muss ich hier auf Code aufsetzen, der von jemand anderem ist und an dem ich nicht einfach was ändern kann.

Deswegen geht das leider nicht so einfach.

@MCoder: Danke. Deine Antwort war genau das was ich wissen wollte. :)
 
Zuletzt bearbeitet:
Zurück