Kamfix Geschrieben 7. April 2013 Geschrieben 7. April 2013 Hi zusammen, bin gerade an einer Übungsaufgabe in C, bei der eine Funktion gebraucht wird. Die Funktion übernimmt den Inhalt der Variablen n, ändert ihn in der Funktion und gibt ihn zurück an das aufrufende Hauptprogramm (main). Die Variable gew_mw verursacht, soweit ich beim Debuggen gekommen bin, noch keine Probleme. Es geht hier also um n. Der gesamte Programmcode in C ist als txt-Datei dabei. Aufruf der Funktion aus dem Hauptprogramm: funktion_1(&gew_mw, &n); Die Funktion beginnt: void funktion_1 (double *gew_mw, int *n) Beim Durchgehen im Einzelschritt meckert der Debugger von MS Visual C++ Express in der Funktion bei (...) do { *n++; printf("%i . Wertepaar:\t", *n); (...) in einem Fenster "unbehandelte Ausnahme ... Zugriffsverletzung". Das Fenster "lokal" mit den Variablen-Inhalten etc. zeigt für n "Fehler: Ausdruck kann nicht ausgewertet werden". Ich vermute falscher Aufruf / Übergabe usw. der Variablen-Inhalte... Hinweise willkommen. :confused: Ciao, Andreas Programmcode_4-1.txt Zitieren
zonixx Geschrieben 9. April 2013 Geschrieben 9. April 2013 Hi, übergieb deiner funktion_1 Referenzen LG Zitieren
Klotzkopp Geschrieben 9. April 2013 Geschrieben 9. April 2013 *n++;Das hier tut nicht, was du erwartest. Der Inkrementoperator bindet stärker als der Dereferenzierungsoperator. Hier wird also zuerst der Zeiger n inkrementiert, und dann der inkrementierte Zeiger dereferenziert (was im allgemeinen keinen Nebeneffekt hat, aber bei ungültigen Zeigern undefiniertes Verhalten bewirkt). Du willst erst dereferenzieren und dann inkrementieren, also musst du Klammern benutzen: (*n)++; Noch besser wäre, wenn du dir gleich angewöhnst, Prefix statt Postfix zu benutzen: ++*n;Da hast du das Problem nicht übergieb deiner funktion_1 Referenzen Referenzen gibt's in C nicht. Zitieren
Kamfix Geschrieben 21. Mai 2013 Autor Geschrieben 21. Mai 2013 Moin Klotzkopp, ja danke, die Klammer war's! ;-) Darauf wurde im Buch nicht hingewiesen. Prefix statt Postfix habe ich auch probiert ... geht! Davon wußte ich noch nicht. Wieder was gelernt. Schönen Tach noch! Ciao, Andreas Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.