INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bereichsüberschreitung ?
25.08.2016, 19:04 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2016 19:04 von Tommy56.)
Beitrag #9
RE: Bereichsüberschreitung ?
(25.08.2016 17:42)Hans-Jürgen-1 schrieb:  Das Element a[8] gibt es doch nicht. Nur a[0].....a[7].

Ob es das Element gibt, weiß der Prozessor doch nicht. Er hat die Anweisung an diese Stelle (die wir als Index 8 interpretieren) zu schreiben und das tut er auch.
Wenn man Glück hat stand dort nichts (wichtiges) ansonsten kommt es zu unerklärlichem Verhalten.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2016, 00:29 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2016 00:29 von Scheams.)
Beitrag #10
RE: Bereichsüberschreitung ?
Vielleicht hilft das ja ein wenig, zu verstehen was abgeht.

Code:
void
setup()
{
  Serial.begin(9600);
  
  int a[5] = {0, 0, 0, 0, 0};
  int b = 0;
  
  Serial.print("Address of a[0]: "); // Addresse von a[0]
  Serial.println((unsigned int) a);
  Serial.print("Address of b: ");  // Adresse von b
  Serial.println((unsigned int) &b);
  
  Serial.print("Maybe undefined value (a[5]): ");  // Wert von a[5] vielleicht undefiniert
  Serial.println(a[5]);
  
  Serial.println("Change a[5] to 50.");  // a[5] auf Wert 50 setzen
  a[5] = 50;
  
  Serial.print("a[5] doesn't affect on b: ");  // a[5] ändernt nichts an b, da b auf a[-1] angelegt wurde
  Serial.println(b);
  
  int *ptr = a + 5;  // Pointer zu a[5]
  Serial.print("Value of pointer to a[5]: ");  // Wert von pointer (= a[5])
  Serial.println(*ptr);
  
  Serial.println("Change a[5] via pointer to 40.");  // mit Pointer den Wert ändern
  *ptr = 40;
  
  Serial.println("Set pointer to a[-1] and change value to 15.");
  ptr = a - 1;    // Pointer zu a[-1] (= b) setzen
  *ptr = 15;  // Wert von pointer ändern
  Serial.print("a[-1] affects on b: "); // der Pointer verändern b
  Serial.println(b);
}

void
loop()
{
}

Code:
AUSGABE:
Address of a[0]: 2282
Address of b: 2280
Maybe undefined value (a[5]): 104
Change a[5] to 50.
a[5] doesn't affect on b: 0
Pointer to a[5]: 50
Change a[5] via pointer to 40.
Set pointer to a[-1] and change value to 15.
a[-1] affects on b: 15

Die Addresse von b liegt unter a[], da diese Variablen in den Stack kommen und der Stack "geht von oben runter" (Speicheradresse reduziert sich). Ich hoffe, das ist richtig, ansonsten mich bitte korrigieren. Smile

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste