Hi,
Das hört sich jetzt vermutlich wie eine Anfängerfrage an, aber ich stehe da momentan echt auf dem Schlauch. Gibt es irgendeine Möglichkeit an einem dynamisch erzeugten Array zur Laufzeit abzufragen, wie groß er ist?
Also in der Form:
[highlight=c++]
void UsingArrays()
{
float statArray[12]; // das geht ja nur, wenn zu Compilezeit die Größe feststeht
int arraySizeStat= sizeof(statArray) / sizeof(statArray[0]);
bzero(statArray, 12* sizeof(float));
float* a=new float[readSizeFromSourceForA()];
int arraysizeA=???
bzero(a,arraySizeA*sizeof(float));
float* b= (float*) calloc(readSizeFromSourceForB(), sizeof(float)); // hier habe ich ja gar keine Chance, außer ich merke es mir in einer anderen Variable
int arraySizeB=readSizeFromSourceForB();
if(arraySizeA == arraySizeB) printf("gleich groß");
delete[] a;
delete[] b;
}
[/highlight]
Hintergrund ist, dass ich um new, malloc, Speicherzugriffe und Konsorten besser kontrollieren zu können, eine Klasse, die std::vector nutzt umschreiben wollte, aber nicht jedesmal, wenn ein std::vector an eine Funktion übergeben wird, die die Länge des Vektors braucht (also irgendwo auf vector.size() zugreift), extra Parameter mit übergeben will, und eine extra Datenstruktur zu erzeugen, die den float[] Array und die Größenagabe enthält, kommt mir zu buganfällig vor (wenn man den Array verändert, ohne die Größenangabe mitzuändern)
Gruß
Martin
Das hört sich jetzt vermutlich wie eine Anfängerfrage an, aber ich stehe da momentan echt auf dem Schlauch. Gibt es irgendeine Möglichkeit an einem dynamisch erzeugten Array zur Laufzeit abzufragen, wie groß er ist?
Also in der Form:
[highlight=c++]
void UsingArrays()
{
float statArray[12]; // das geht ja nur, wenn zu Compilezeit die Größe feststeht
int arraySizeStat= sizeof(statArray) / sizeof(statArray[0]);
bzero(statArray, 12* sizeof(float));
float* a=new float[readSizeFromSourceForA()];
int arraysizeA=???
bzero(a,arraySizeA*sizeof(float));
float* b= (float*) calloc(readSizeFromSourceForB(), sizeof(float)); // hier habe ich ja gar keine Chance, außer ich merke es mir in einer anderen Variable
int arraySizeB=readSizeFromSourceForB();
if(arraySizeA == arraySizeB) printf("gleich groß");
delete[] a;
delete[] b;
}
[/highlight]
Hintergrund ist, dass ich um new, malloc, Speicherzugriffe und Konsorten besser kontrollieren zu können, eine Klasse, die std::vector nutzt umschreiben wollte, aber nicht jedesmal, wenn ein std::vector an eine Funktion übergeben wird, die die Länge des Vektors braucht (also irgendwo auf vector.size() zugreift), extra Parameter mit übergeben will, und eine extra Datenstruktur zu erzeugen, die den float[] Array und die Größenagabe enthält, kommt mir zu buganfällig vor (wenn man den Array verändert, ohne die Größenangabe mitzuändern)
Gruß
Martin
Comment