Variable (int) nimmt unmöglichen Wert an

OP #3538110
Lesenswert?

Hallo und guten Tag,

ich programmiere zur Zeit die Firmware (Programmiersprache C) eines 
Mikrocontrollers (LPC2148) und habe ein Problem, bei dem ich mir selber 
nicht mehr weiterhelfen kann.

Und zwar habe ich eine Variable (int) die ich mit jedem "Durchgang" um 
eins erhöhe.. also ganz trivial:

int counter;

while(counter < 100)
{
   // Andere Funktionen und Anweisungen
   // ...

   counter++;

   // Ausgabe der Variable counter in ein Logfile
}

Nun passiert es jedoch, dass, wenn ich mir die Werte in ein Logfile 
ausgeben lasse die Variable counter ab und zu folgende Werte annimmt:

40
41
42
43
741749554
-> hier bricht das Programm ab, da 741749554 größer als 100 ist


Kann mir jemand einen Tipp geben, wie so etwas möglich ist?? Woher kommt 
diese abnormal hohe Zahl (die im übrigen immer so im 700 Mio.-Bereich 
ist.
Wie kann ich das eventuell vorbeugen?

Über Ratschläge würde ich mich freuen!

VG
Gast #3538126
Lesenswert?

>>> Kann der Fehler auch dort liegen, obwohl ich die Variable counter
>>> sonst irgends "anfasse" also auslese oder verändere?

Ja. Genau darum geht es...
>>>>   // Andere Funktionen und Anweisungen
>>>>   // ...
Entferne den Kram dazwischen und das Problem verschwindet auch.....

Gruß T.
#3538127
Lesenswert?

Henning Vogel schrieb:

> Kann der Fehler auch dort liegen, obwohl ich die Variable counter sonst
> nirgends "anfasse" also auslese oder verändere?

Du musst nicht explizit auf die Variable zugegriffen haben. Es reicht 
völlig, wenn du an irgend einer anderen Stelle im Programm den 
Speicherbereich (in dem die Variable liegt) niedergebügelt hast. 
Arrayzugriffe sind beispielsweise dafür ein heißer Kandidat:
1
int i;
2
int a[3];
3
int j;
4

5

6
  i = 5;
7
  j = 5;
8
  a[3] = 8;

die Chancen stehen gut, dass durch das Beschreiben von a[3] (welches 
nicht existiert), entweder i oder j seinen Wert ändert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren