Speichergröße eines Arrays ermitteln
-
Hey C++ Community!
Ich habe Probleme die Speichergröße eines Arrays im Heap bzw. bei der übergabe als Parameter einer Funktion zu ermitteln. Hat jemand ne Idee?#include <iostream> using namespace std; void test(int* arr) { cout << " " << sizeof(*arr) << endl; } void main() { int arr[5]= {1, 2, 3, 4, 5}; int* ptr = new int[5]; test(arr); cout << endl << " " << sizeof(arr) << endl << " " << sizeof(ptr) << endl << endl; }Ich bkomme von der Funktion 4 byte zurück. Von der Abfrage des Pointers auch nur 4 byte. Aber vom orginal Array bekomme ich die gewünschten 20 byte zurück.
Ich würde mich über tipps bzw. Hilfe freuen!
LG. Make
-
sizeof(arr) funktioniert nur bei "echten" Arrays, ptr ist aber ein Pointer und liefert die Größe des Wertes zurück, auf den der Pointer zeigt.
Es ist aber besser, wenn man Daten via Iteratoren übergibt.
Wenn dir diese Begriffe nichts sagen, google mal danach.
-
Alternativen:
//Hier sind es wieder 20 Byte Größe, funktioniert aber nur für 4 Elemente große Arrays. void test(int (&arr)[4]){ cout << " " << sizeof(*arr) << endl; }//Hier geht es für beliebig große Arrays. Man kann auch direkt size aus dem Template statt sizeof benutzen. //Nachteil: Er baut dir für jede Arraygröße eine neue Funktion. //Ein schlauer Compiler wird das aber wahrscheinlich wegoptimieren. template <int size> void test(int (&arr)[size]) { cout << " " << sizeof(*arr) << endl; }