Versuche mit Dynamischen Arrys
-
Guten morgen,
ich versuch mich gerade in die Welt der dynamischen Arrays einzudenken, aber ich stehe gerade ein wenig auffem Schaluch. Und zwar hab ich versucht ein Array durch eingabe dynamisch zu erweitern. Sobald ich jedoch mehr als 5 Felder habe (0-4) stürzt das Programm abWarum ist das so, kann mir da wer helfen?
/* Erste Gehversuche mit Dynamischen Arrays */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <fb5.h> //Fachbereichsspezifische Bib, getnum() void main (void) { int gro,i,*arr,neugro; //gro = Größe des Arrya, neugro = neue Größe des Arrays printf("\nBitte benötige Anzahl der Felder eingeben: "); gro = getnum(); arr = (int *)malloc(gro * sizeof(int)); if( arr == NULL ) { //prüft ob Speicher freigegeben wurde printf("\n Es konnte kein Speicher reserviert werden!"); } printf("\nWerte für Array Feld eingeben: "); for(i=0; i <= gro; i++) { printf("\nArray[%d] = ",i); *(arr+i) = getnum(); } while(1) { printf("\nWieviel Werte wollen Sie jetzt zusätzlich eingeben, um Eingabe zu verlassen 0: "); neugro = getnum(); if( neugro == 0 ) break; gro += neugro; arr = (int *)realloc(arr,gro*sizeof(int)); //reserviert neuen Speicher if( arr == NULL ) { printf("\n Es konnte kein zusätzlicher Speicher mehr reserviert werden"); break; } for(i = (gro-neugro)+1; i<= gro; i++) { //(gro-neugro)+1 soll für i den Startwertbestimmen an dem das Array weiter befüllt werden kann printf("\nArray[%d] = ",i); *(arr+i) = getnum(); } } printf("\nSie haben folgende Werte eingegeben: "); for(i=0; i <= gro; i++) { printf("\nArray[%d] = %d",i,*(arr+i)); } printf("\n\n\n"); }
Gruß
Sascha
-
Du überschreitest die Arraygrenzen mehrmals:
for(i=0; i <= gro; i++)
Wenn gro == 10, hättest Du Platz für 10 Elemente, belegst aber 11 (0...10 sind 11 Indizes). Bei der Ausgabe unten nochmal.
for(i = (gro-neugro)+1; i<= gro; i++)
Hier genauso: Wenn Du vorher 10 Elemente hattest (0...9), beginnst Du hier beim 12. Element (10+1 == 11) weiterzumachen.
-
for(i=0; i < gro; i++)
for(i = (gro-neugro); i< gro; i++)
Ah jo so klappt das, mist hab ich nicht gesehen ärgerlich
Danke danke