Zum Inhalt springen

[C] Funktionen / aufgerufene Funktion ändert Daten


Empfohlene Beiträge

Geschrieben

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

Geschrieben
*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.
  • 1 Monat später...
Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...