Wieso kriege ich hier einen Speicherfehler?



  • Ahoy

    Ich wollte nur mal fragen wieso ich hier einen Speicherfehler beim ausfuehren des Programmes kriege wenn ich das erste feld im array feullen will...

    Das ganze wurde mit VS 6 gemacht und der Sinn und Zweck sind unanstastbar weil eine Lernaufgabe

    #include <stdio.h>
    
    void eingabe(char feld1[7],int feld2[7],float feld3[7],long int feld4[7])
    {
    
       /* -----Ab hier Eingabe----- */
    
       for (int zaehler1=0;zaehler1<=6;zaehler1++)
       {
       printf("Bitte Eingabe fuer Array 1 Feld %d\n",zaehler1); 
       scanf("%c",feld1[zaehler1]);
       }
       printf("\n\n");
       for (int zaehler2=0;zaehler2<=6;zaehler2++)
       {
    
       printf("Bitte Eingabe fuer Array 2 Feld %d\n",zaehler2); 
       scanf("%d",feld2[zaehler2]);
    
       }
       printf("\n\n"); 
       for (int zaehler3=0;zaehler3<=6;zaehler3++)
       {
    
       printf("Bitte Eingabe fuer Array 3 Feld %d\n",zaehler3); 
       scanf("%d",feld3[zaehler3]);
    
       }
       printf("\n\n"); 
       for (int zaehler4=0;zaehler4<=6;zaehler4++)
       {
    
       printf("Bitte Eingabe fuer Array 4 Feld %d\n",zaehler4); 
       scanf("%d",feld4[zaehler4]);
       }
       printf("\n\n");
    
    }
    
    void ausgabe(char feld1[7],int feld2[7],float feld3[7],long int feld4[7],char *point1,int *point2,float *point3,long int *point4)
    {
    
    point1=&feld1[0];
    point2=&feld2[0];
    point3=&feld3[0];
    point4=&feld4[0];
    
       /* -----Ab hier Ausgabe----- */
    
       for (int zaehler5=0;zaehler5<=6;zaehler5++)
       {
       printf("Ausgabe %d von Feld1 %c \n",zaehler5,*point1); 
       point1++;
       }
       printf("\n\n");
       for (int zaehler6=0;zaehler6<=6;zaehler6++)
       {
    
       printf("Ausgabe %d von Feld2 %d \n",zaehler6,*point2); 
       point2++;
    
       }
       printf("\n\n"); 
       for (int zaehler7=0;zaehler7<=6;zaehler7++)
       {
    
       printf("Ausgabe %d von Feld3 %f \n",zaehler7,*point3); 
       point3++;
    
       }
       printf("\n\n"); 
       for (int zaehler8=0;zaehler8<=6;zaehler8++)
       {
    
       printf("Ausgabe %d von Feld4 L%c \n",zaehler8,*point4);
       point4++;
       }
       printf("\n\n");
    
    }
    
    main ()
    {
       char feld1[7];
       int   feld2[7];
       float feld3[7];
       long int feld4[7];
       char *point1=&feld1[0];
       int *point2=&feld2[0];
       float *point3=&feld3[0];
       long int *point4=&feld4[0];
    
       eingabe(feld1,feld2,feld3,feld4);
       ausgabe(feld1,feld2,feld3,feld4,point1,point2,point3,point4);
    
       return 0;
    }
    

    Danke

    yours
    ara



  • Du mußt scanf Pointer übergeben. z.B. hier:

    scanf("%c",feld1[zaehler1]);
    

    =>

    scanf("%c", &feld1[zaehler1]);
    //          ^
    //          |
    //  da! ----+
    


  • Ok das geht jetzt danke 🙂

    aber wieso "explodiert" mir das programm dann bei der Ausgabe?



  • weil scanf dann das, was zufälligerweise in der Variable gespeichert ist, als Adresse interpretiert, und da deine Eingabe hinspeichert.



  • achso und (sorry wenn ich jetzt irgendwie penetrant wirke aber das programm muss bis morgen laufen :-/) wie kann ich das abstellen das anstelle der adresse der inhalt verwendet wird?



  • Umgekehrt.

    Wie Bashar gesagt hat, mit &.

    int i = 0; // 0 ist Inhalt von i
    int* p = &i; // p ist Adresse von i
    

Anmelden zum Antworten