C++ Dynamische Arrays?
Hallo,
meine Frage bezieht sich auf Dynamische Arrays. Ich möchte eine zum Start ungewisse Anzahl an Zufallswerten in einem Array speichern. Es kommt aber die ganze Zeit eine Fehlermeldung, kann mir jemand erklären was ich falsch mache.
Danke
Dank euren guten Tipps, habe ich die das dynamische Array hinbekommen. Vielleicht kann mir auch jemand helfen, wie ich die generierten Zahlen in einer Struktur speichern kann, also die Struktur als dynamisches Array nutze.
3 Antworten
Als Ergänzung zu jo135s Antwort noch ein paar Tips:
In C++ ist der Programmierer für die Speicherverwaltung zuständig.
Mit 'new' reservierst Du hier Speicher:
p = new int[k];
Aber Du gibst diesen Speicher nicht mehr frei. Das heißt dass Dein Programm ein Speicherleck produziert, was ein Sicherheitsrisiko darstellt.
Deshalb solltest Du den Speicher immer freigeben, wenn Du ihn nicht mehr brauchst, aber spätestens bevor das Programm endet:
delete[] p;
Unter anderem deshalb rate ich grundsätzlich von der Verwendung von Arrays ab, zudem es in 99% der Fälle bessere Alternativen (wie z.B. Smart-Pointer) gibt.
In Deinem Fall wäre ein Vektor gut geeignet:
#include <vector>
...
vector<int> p(k);
...
p[i] = ...
Der nimmt Dir auch die Speicherverwaltung ab. Viele Grüße!
Edit: Noch etwas, das mir aufgefallen ist:
Die Abbruchbedingung in der Schleife muss
i < k
und nicht
i <= k
lauten, denn Dein Array ist bei k - 1 zu Ende, und so wird eine Speicherzugriffsverletzung verursacht.
Der Vektor hätte Dir hier einen Fehler ausgegeben, aber bei Arrays merkt man das nicht! Echt gemein.
p ist ein Pointer (vom Typ int*). Du willst aber nicht den Pointer verändern, sondern jenen int-Wert, auf den der Pointer zeigt. Ergo musst du den Pointer dereferenzieren.
Und das ginge mit der Syntax
*p
Aber es würde noch immer keinen Sinn ergeben, weil du hier Pointerarithmetik und Arrayschreibweise vermischst (p zeigt ja immer auf den Anfang, also das erste Feld des Arrays). Du willst wohl eher
p[i]
Stimmt das mit p[i] habe ich vergessen, und das mit dem anderen probiere ich gleich mal aus. Danke dir
Du versucht den int einem pointer zuzuweisen.
p[i] =someval;
(p+i)*=someval;
Deutlich bequemer wäre allerdings die Nutzugn von std::vector.
Und das auch nur „vielleicht“. In der Praxis würde das Programm vermutlich alle Tests bestehen. Es knallt erst dann, wenn es beim Kunden installiert ist :-(