• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[C++] Variable Größe von Arrays

creative235

Neues Mitglied
Hallo,

ich weiß es ist nicht umbedingt nur C++ um was es hier geht, aber da ich in C++ programmiere, hat sich das angeboten.

Und zwar ging ich noch bis vor einem Jahr auf eine Informationstechnische Schule, dort hatte ich mal was realisiert, was mein Lehrer aber abtat, mit den Worten: "Geht net!". Hatte aber prächtig funktioniert, weswegen mich jetzt interessieren würde ob es möglich ist und wenn nicht, wieso nicht.

Ich hatte ein Programm erstellt welches einmalige Zufallszahlen ausspuckt, und zwar genauso viel wie der Anwender möchte. Deshalb habe ich prinzipiell mit einem Array gehandhabt, ganz formel so:

cin >> felder;
int array[felder];

Mein Lehrer meinte daraufhin aber das würde wegen der Speicherreservierung nicht gehen, aber ich verstehe nicht wieso? Ich habe ja das Array erst nach der Eingabe der Anzahl deklariert, heißt ob ich da jetzt eine konstante 6 oder eine dynamische Zahl habe ist doch theoretisch egal, weil sich die größe des Arrays sich nach der Deklaration nicht ändert. Sehe ich das falsch oder habe ich Recht?

Lg
 
Das Problem ist, dass der Compiler wissen muss wieviel Speicher er belegen soll, das kann er aber in deinem Fall nicht, da du erst zur Laufzeit festlegen willst, wieviel Speicher du brauchst. Dein Code kann also gar nicht kompiliert werden.
 
Ich bin mir nicht mehr ganz sicher (C++ ist schon ne Weile her), aber das müsste doch gehen.
Code:
int* arr = new int[felder];

Gruß KY
 
Derartig alloziierter Speicher muss allerdings mittels delete[] arr; wieder freigegeben werden.
 
Desweiteren würde sich hier doch meines Wissens noch verctoren anbieten, welche so ähnlich Funktionieren wie listen. Wie mein VorVorgänger schon richtig beschrieben hatten funktioniert es so aber auch mit der "dynamischen" größe wobei wie Comodore schon gesagt hat es hier wichtig ist den Speicher per Delete wieder freitzugeben. Leider hat c++ noch keinen GarbageCollector:D

lg.
 
Wieso "leider"? Man muss selbst darauf achten, was man mit seinem Speicher alles anfängt; Der Computer sollte nicht raten müssen, wann welcher Speicher wieder freigegeben werden darf.


Einen std::vector kann man auch verwenden, das ist quasi wie eine Klasse für dynamische Arrays. Mit einer Liste hat er allerdings wenig zu tun, sowohl was die Implementation, als auch den wahlfreien Zugriff auf Vector-Elemente angeht.
 
Ich weiß nicht.. auf der einen Seite hast du natürlich vollkommen recht :) aber ich finde den GC eigl. schon eine feine sache :)

Ich dachte immer man kann den Verctor mit einer Liste vergleichen :) danke für den Hinweiß.

lg.

LucaWelker
 
Zurück
Oben