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 ab 🙂

    Warum 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


Anmelden zum Antworten