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
zonixx Geschrieben 9. April 2013 Geschrieben 9. April 2013 Hi, übergieb deiner funktion_1 Referenzen LG
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden