Forum: Compiler & IDEs Fehler bei mehrfachem Funktionsaufruf


von Jens R. (jeronnimo)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich verzweifel grad an einem einfachen Codeschnipsel (Anhang)!

Problem: Wenn ich die Funktion "F_Verzoegerung(x,y)" nur ein mal aufrufe 
funktioniert das Programm wie erwartet, d.h. es wird die korrekte 
Verzögerungszeit ermittelt.

Rufe ich die Funktion F_Verzoegerung(x,y) jedoch ein zweites mal auf, 
(Freigabe_2=F_Verzoegerung(Sekundentakt,10);) kommt es zur ungewollten 
Verkürzung der Verzögerungszeit des 1. Aufrufes und dies obwohl alle 
Variablen als static deklariert sind.

Kann mich jemand auf den Weg der Erleuchtung führen, Besten Dank!

Grüße je

von Stefan Salewski (Gast)


Lesenswert?

Du hast da eine lokale Variable

First_Run

die Du abfragst, ohne zuvor einen Wert zuzuweisen?

von Martin (Gast)


Lesenswert?

Ich würde sagen es liegt daran das du der Variable Sekundentakt vor dem 
Eintritt in die while Schleife keinen Wert zuweist, in der wihile 
Schleife machst du das jedoch. Das musst du ändern denke ich

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das ist ja fast wie ein Kapierschutz (kein Schreibfehler!!) wenn eine 
Variable "First_Run" heißt, in Wahrheit aber das Gegenteil meint. Also 
eher sowas wie "Second_Run_And_Each_Run_After" ;-)

Zudem wird "Freigabe" nie zurückgesetzt. Genausowenig wie das ominöse 
"First_Run". Solltest du nach Ablauf deiner Zeit 
"Einschalt_Verzoegerung" nicht diese beiden Werte auch neu 
initialisieren?

von Jens R. (jeronnimo)


Lesenswert?

Danke für die Hinweise, dies ist es aber alles nicht, das Programm 
verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen 
lokalen Variablen wie beim 1. Aufruf zugreift (sollten baer beide mit 
einem getrennten Set an lokalen Variablen arbeiten) - kann so was an 
Compilereinstellungen liegen???

Gruß je

von Stefan E. (sternst)


Lesenswert?

Jens R. wrote:
> das Programm
> verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen
> lokalen Variablen wie beim 1. Aufruf zugreift

Natürlich tut sie das, du hast die Variablen ja schließlich als static 
deklariert. Vielleicht solltest du noch mal nachlesen, was static für 
lokale Variablen bedeutet.

von Jens R. (jeronnimo)


Lesenswert?

Hi Stefan,

static
Die Variable ist im Block gültig bzw. im Quell-Modul (also in der 
C-Datei, in der die angelegt wurde), wenn sie nicht innerhalb eines 
Blockes angelegt wurde. Statische Variablen werden nicht in Registern 
oder im Frame der Funktion angelegt, sondern im selben Speicherbereich, 
in dem auch die globalen Variablen liegen; Konstanten evtl. auch im 
Flash. Eine lokale Variable, die als static angelegt wird, "überlebt" 
also das Verlassen des Blocks und hat beim neuerlichen Betreten des 
Blockes ihren bisherigen Wert. In unterschiedlichen Blöcken angelegte 
lokale statische Variablen beziehen sich auf unterschiedliche 
Speicherstellen, genau wie bei lokalen Variablen auch.

bin schon seit 2 Tagen am "Suchen" - als was müssen die Variable dann 
deklariert werden, ihr Inhalt soll für erhalten bleiben bis zum nächsten 
Schleifendurchlauf, der 2. Aufruf der Funktion in der gleichen Schleife 
soll aber mit anderen Werten arbeiten?

eine Idee?

lg je

von Stefan E. (sternst)


Lesenswert?

Fasse die Variablen zu einer Struktur zusammen, erzeuge dann ein Array 
mit der nötigen Anzahl dieser "Variablen-Sets" und gebe der Funktion per 
Parameter (Zeiger oder Index) die Info, mit welchem "Set" sie arbeiten 
soll.

von Jens R. (jeronnimo)


Lesenswert?

Danke Stefan, Suche damit beendet, hatte static wohl dann doch falsch 
interpretiert...

Gruß je

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.