C++ Dynamische Arrays?


08.11.2023, 18:27

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

Von Experte ralphdieter bestätigt

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.

ralphdieter  07.11.2023, 20:47
Array ist bei k - 1 zu Ende, und so wird eine Speicherzugriffsverletzung verursacht

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 :-(

1
aperfect10  08.11.2023, 18:13

Danke für den Stern!

0

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]
Questskipper 
Fragesteller
 07.11.2023, 16:55

Stimmt das mit p[i] habe ich vergessen, und das mit dem anderen probiere ich gleich mal aus. Danke dir

0

Du versucht den int einem pointer zuzuweisen.

p[i] =someval; 
(p+i)*=someval; 

Deutlich bequemer wäre allerdings die Nutzugn von std::vector.