Heap speicher
-
Hallo,
was meint man denn mit dynamischer speicherung.
int* ptr=new int[1000];
jetzt hab ich doch auch eine feste größe angelegt oder ?
kann ich ja gleich den stack verwenden
-
std::size_t n; std::cin >> n; int *p = new int[n]; // <-- variable Größe. delete[] p;Außerdem kriegt man ab einer bestimmten Arraylänge Probleme mit der Stackgröße (Stichwort Stackoverflow).
-
muss der speicher bei new zusammenhängend sein? Oder kann es Lücken geben ?
-
Wenn du einen Block anforderst, bekommst du einen zusammenhängenden Speicherbereich - bei aufeinanderfolgenden new-Aufrufen besteht keine Beziehung zwischen den zurückgegebenen Speicherbereichen.
-
sagen wir ich möchte 1000 Byte anforden . aber findet keine 1000 Byte aber
es wären 2 mal 500 Byte frei dann hätte ich Pech gehabt oder ?
-
blurry333 schrieb:
sagen wir ich möchte 1000 Byte anforden . aber findet keine 1000 Byte aber
es wären 2 mal 500 Byte frei dann hätte ich Pech gehabt oder ?Ja, und normalerweise wird dann früher oder später eine std::bad_alloc Exception geworfen.
-
int main() { int* ptr=new int[100]; cout<<sizeof(*ptr); }das müßten doch jetzt 400 Byte sein . ABer sizeof gibt nur 4 aus.
Kann ich mir die 400 Byte ausgeben lassen ?
-
Nein, kannst du nicht - ein Zeiger "weiß" nur, wie groß der Datentyp ist, auf den er zeigt, aber nicht wieviele Elemente er dahinter nutzen darf. Wenn du dynamischen Speicher mit "messbarer" Größe benötigst, solltest du dir mal std::vector<> ansehen.
-
Und in deinem Code misst du die Grösse des ersten Elements.
-
Die 400 kannst du dir z.B. so ausgeben lassen

char* asd[100]; cout << sizeof(asd); //400
-
[Rewind] schrieb:
Die 400 kannst du dir z.B. so ausgeben lassen

Das funktioniert allerdings nur mit Arrays auf dem Stack. Sieh dir mal den Threadtitel an...