C Array vergrößern?

2 Antworten

Woher ich das weiß:Studium / Ausbildung – Informatikstudent
PeterKremsner  19.01.2020, 15:45

Ein VLA kann auch nicht beliebig erweiter werden, die größe des Arrays wird nur zur Laufzeit festgelegt kann allerinds nach der Definition von dem VLA nicht mehr geändert werden.

1
derKea  20.01.2020, 05:35

Falsch, VLAs wurden aus gutem Grund aus dem Standard entfernt und erst gar nicht von C++ übernommen.

Wenn man auf saubere und sichere Programmierung wert legt, dann verzichtet man auf VLAs, auch wenn diese als Compilerextension zur Verfügung stehen.

VLAs waren einer der gröbsten Fehler, die jemals im C Standard eingeführt wurden, und obwohl der Fehler in den folgenden Versionen sehr schnell behoben, bzw. VLAs ersatzlos gestrichen wurden, hält sich dieses Geschwür bis heute unter Anfängern, da vermeintlich einfach einsetzbar ... was ein Trugschluss ist.

0

Das geht in C nicht du kannst höchstens ein größeres Array nehmen und die Daten vom alten da rein schreiben.

Die einzige Möglichkeit wäre realloc wenn du dynamische Speicherverwaltung nutzt, dazu muss das Array aber schon mit malloc erstellt worden sein.

Wenn du oft so etwas machen musst wäre eine linked List performanter weil die keine Kopieroperationen beim hinzufügen benötigt, dafür braucht sie aber je nach Elementgröße mehr Speicher weil du auch immer einen Pointer zum nächste Element speichern musst.

codinginc 
Fragesteller
 19.01.2020, 15:46

Ich kann auch kein neues Array erstellen, da alle Variablen oben deklariert werden müssen und da kenn ich die Länge ja noch nicht :/

Dann schau ich mir mal linked Lists an, danke

0
PeterKremsner  19.01.2020, 15:51
@codinginc

Eventuell kannst du das Problem umsortieren sodass du entweder ein VLA nehmen kannst sobald du die Länge kennst oder du reservierst mehr Speicher als du zu Beginn brauchst und wo deine Daten sicher passen sonst würds auch mit malloc und realloc gehn was aber eventuell nicht so performant ist wenn du den Heap häufig nutzt.

1
codinginc 
Fragesteller
 19.01.2020, 16:32
@PeterKremsner

Kann man die linked Lists denn einfach in Arrays umwandeln nach der Eingabe?

0
PeterKremsner  19.01.2020, 17:38
@codinginc

Nein nicht effektiv. Du kannst höchstens mit malloc einen Speicherbreich anfordern indem du dann die Linked List alls Array speichern kannst, allerdings erhöt das die Speicherfragmentierung.

Welche Datenstruktur hier am besten ist kann man nur angeben wenn man wissen würde was du mit den Daten nacher machen musst, also musst du auf beliegige indizes zugreifen oder musst

1
codinginc 
Fragesteller
 19.01.2020, 17:44
@PeterKremsner

Ich muss beliebig viele Zahle einlesen und dann jede Zahl durchgehen und mit 2 multiplizieren

0
PeterKremsner  19.01.2020, 18:33
@codinginc

Ok dann ists ein klassisches Beispiel für eine Linked List.

Lies die Zahlen in die Liste ein und dann iteriere drüber und mach bei jedem Eintrag *2.

1
codinginc 
Fragesteller
 19.01.2020, 19:57
@PeterKremsner

Perfekt , danke :D

Muss ich mich halt mal mit den Listen beschäftigen

0
PeterKremsner  19.01.2020, 20:06
@codinginc

Ist im Grunde nicht so schwer. Du hast eine struct mit einem int und einem pointer auf diese Struct.

Dein root Element legst di fix an und immer wenn eins dazu kommt machat du malloc mit dieser struct setzt den int in ihr gehst ans ende der Liste und setzt den Pointer auf dein neu erstelltes Element.

Das klingt am Anfang kompliziert ists aber im Grunde gar nicht.

1
codinginc 
Fragesteller
 19.01.2020, 20:15
@PeterKremsner

Wir hatten halt in der Vorlesung noch nicht mal structs, aber ich schau mir einfach paar Videos dazu an, dann sollte das passen :D

0