Schon wieder ein Speicherzugriffsfehler... ich verstehe das nicht!



  • Hi(gh)!

    Wenn der struct-Datentyp "Klimadatensatz" so definiert ist:

     typedef struct 
     {
       char station[30];
       char latitude[11];
       char longitude[12];
       short int cperiod_first;
       short int cperiod_last;
       float temperatur[DIM];
       float niederschlag[DIM];
       float tempmittel;
       float niedsumme;
       char formula[4];
       char quelle[60];
     } Klimadatensatz;
    
    

    und es für die Eingabe der jeweils 12 Temperatur- und Niederschlagsmittelwerte eine eigene Funktion input() gibt:

    void input(float* daten, const char* typ, const char** mon)
    {
      unsigned short i;
      for (i=0; i<DIM; i++)
      {  
        printf("\n%s für %s: ", typ, mon[i]);
        scanf("%f", daten++);
        getchar();
      }
    }
    
    

    wieso führt dann

    input(Eingabe.temperatur, "Temperatur", monate);
    

    zu einem Speicherzugriffsfehler? (das struct-Objekt ist inzwischen keine globale Variable mehr)

    Bis bald im Khyberspace!

    Yadgar





  • In deinem Post fehlt die Definition von monate.

    Dein Lösungslink deutet an, das du monate als 2D-Array definiert hast.
    char monate[12][24] = {"Januar", Febr...", ... ,"..ber"};
    Das ist aber kein Doppelzeiger (als den du mon definiert hast).

    Für solche Listen nimmt man i.A. aber ein Array mit Zeigern.
    char *monate[] = {"Januar", Febr...", ... ,"..ber"};
    Dann kannst du monate auch als Doppelzeiger übergeben.

    Darum ist der Fehler nicht im gezeigten Code.

    Der Compiler gibt für solche fälle Warnungen aus. Die muss man allerdings auch
    beachten (bzw. teilweise auch aktivieren'),
    Du solltest Warnungen wie Fehler behandeln und ihre Ursache beseitigen.

    Das Buch, auf dass dein Link verweist, ist fehlerhaft.
    (Das ist noch die 1, Auflage, in der gedruckten Ausgabe sind einige Fehler behoben)
    Der Autor hat hier keinen guten Ruf.
    Lies dir mal die 1-Sterne Bewertungen bei Amazon dafür durch.

    Wozu ist das getchar() in deinem Code?
    Wenn du scanf richtig verstanden hast, weißt du, das es nicht gebraucht wird.
    In dem verlinkten Buch steht dazu auch nur Müll.



  • Hi(gh)!

    @dirkb sagte in Schon wieder ein Speicherzugriffsfehler... ich verstehe das nicht!:

    Das Buch, auf dass dein Link verweist, ist fehlerhaft.
    (Das ist noch die 1, Auflage, in der gedruckten Ausgabe sind einige Fehler behoben)
    Der Autor hat hier keinen guten Ruf.
    Lies dir mal die 1-Sterne Bewertungen bei Amazon dafür durch.

    Wozu ist das getchar() in deinem Code?
    Wenn du scanf richtig verstanden hast, weißt du, das es nicht gebraucht wird.
    In dem verlinkten Buch steht dazu auch nur Müll.

    Tja, Internet halt... Google ist niemandes Freund, Google scheißt einem nur den Kopf mit unbrauchbarem Informationsmüll zu! Google ist große Klasse, wenn man nach Nazipropaganda, Verschwörungskokolores, dummem Gebrabbel und Pornodreck sucht, weil das Netz anscheinend hauptsächlich dazu erfunden wurde... aber wenn man wirklich brauchbare Informationen zu welchem Thema auch immer sucht, verlässt man sich besser auf richtige Menschen, die einem auch die richtigen Bücher nennen... was würdest du z. B. für C empfehlen?

    Bis bald im Khyberspace!

    Yadgar



  • Hi Yadgar,

    Tja, Internet halt... Google ist niemandes Freund, Google scheißt einem nur den Kopf mit unbrauchbarem Informationsmüll zu! Google ist große Klasse, wenn man nach Nazipropaganda, Verschwörungskokolores, dummem Gebrabbel und Pornodreck sucht, weil das Netz anscheinend hauptsächlich dazu erfunden wurde...

    Google ist vielleicht niemandes Freund, aber eines jeden dienstbarer Geist. Google liefert Dir keine Aussagen, schon gleich gar keine unumstößlichen Wahrheiten, sondern nur eine Übersicht was andere dazu ins Netz gestellt haben.
    Google nimmt Dir weder den gesunden Menschenverstand ab noch das selber mitdenken und Google-Ergebnisse verifizieren.
    Google sagt nur (sinngemäß) "Andere meinen so könnte es sein". Ob es so ist, das musst Du selber für Dich rausfinden.

    aber wenn man wirklich brauchbare Informationen zu welchem Thema auch immer sucht, verlässt man sich besser auf richtige Menschen, die einem auch die richtigen Bücher nennen... was würdest du z. B. für C empfehlen?

    Wer sind die "richtigen" Menschen? Ich hatte im Stabü-Unterricht auch nen richtigen Menschen als Lehrer, und auch Sudel-Ede (Karl-Eduard von Schnitzler) war ein richtiger Mensch, genau wie Erich Honecker, Adolf Hitler, Josph Göbbels, Pol Pot, Lenin, Mao, Castro... Trotzdem gehen mir denen ihre "Wahrheiten" hinten vorbei.
    Bei den Aussagen richtiger Menschen ist es nicht anders als bei den Aussagen von Google. Du kommst ohne selber verifizieren nicht hin. Der Unterschied ist nur, das bei richtigen Menschen nur eine Aussage existiert, und die kann richtig oder falsch sein. Bei Google bekommst Du gleich eine Auswahl an Möglichkeiten und somit Futter für weitere Betrachtungen.

    Aber zu Deiner eigentlichen Frage, eigentlich gibt es (vermutlich) nur zwei, die C richtig bis ins Kleinste begriffen hat, weil sie die Sprache entwickelt haben. Brian W. Kernighan, Dennis M. Ritchie.
    Deren Buch "Programmieren in C: Mit dem C-Reference Manual"
    https://www.amazon.de/Programmieren-C-Reference-Manual-deutscher-Sprache/dp/3446154973/ref=asap_bc?ie=UTF8
    oder besser gleich die englischsprachige Originalausgabe ist immer noch die Bibel eines jeden C-Programmierers, dazu dann vielleicht noch Standards, Compilerbeschreibungen...
    Aber mit dem Buch sollte man erst mal ne ganze Weile reichen. Und es ist angenehm kurz und knackig geschrieben. Man kann es wegschmauchen wie einen Krimi.

    Gruß Mümmel



  • @muemmel sagte in Schon wieder ein Speicherzugriffsfehler... ich verstehe das nicht!:

    Aber zu Deiner eigentlichen Frage, eigentlich gibt es (vermutlich) nur zwei, die C richtig bis ins Kleinste begriffen hat, weil sie die Sprache entwickelt haben. Brian W. Kernighan, Dennis M. Ritchie.
    Deren Buch "Programmieren in C: Mit dem C-Reference Manual"
    https://www.amazon.de/Programmieren-C-Reference-Manual-deutscher-Sprache/dp/3446154973/ref=asap_bc?ie=UTF8

    Da habe ich ja noch einmal Glück gehabt... auch wenn meine Ausgabe von 1983 ist! Wann erschien denn die letzte Ausgabe des "Kernighan & Richie"?



  • @yadgar sagte in Schon wieder ein Speicherzugriffsfehler... ich verstehe das nicht!:

    Da habe ich ja noch einmal Glück gehabt... auch wenn meine Ausgabe von 1983 ist!

    Da ist noch das alte K&R C beschrieben.
    1989 kam ANSI-C raus. Auch als C89 bezeichnet. Daher gibt es eine 2. Ausgabe für ANSI-C.

    Da sind (natürlich) auch Fehler enthalten. Aber die sind mittlerweile dokumentiert.
    Ein paar Infos zum Buch: https://www.cs.princeton.edu/~bwk/cbook.html


Anmelden zum Antworten