Variable (int) nimmt unmöglichen Wert an

OP #3538110
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
OP #3538118
THaala schrieb:
> Das Problem liegt hier:
>
>>>>   // Andere Funktionen und Anweisungen
>>>>   // ...
>
> das wirst Du einfügen müssen bzw. ein Listing anhängen.
> Gruß T.

Vielen Dank für die schnelle Antwort!

Kann der Fehler auch dort liegen, obwohl ich die Variable counter sonst 
nirgends "anfasse" also auslese oder verändere?
Gast #3538126
>>> 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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.