AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C++] Wer verändert da meinen Variablenwert? (erledigt)
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] Wer verändert da meinen Variablenwert? (erledigt)

Ein Thema von Matze · begonnen am 5. Mai 2007 · letzter Beitrag vom 5. Mai 2007
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 17:38
Hi,

ich habe noch eine Frage zu C/C++.

Es geht um eine Klasse, das Relevante ist dies hier:

cl_snake.h:

Code:
class cl_snake
{
   public:
      cl_snake(void);
   public:
      ~cl_snake(void);
   public:
      int colors[2];
      int field_size, field_width, field_height;
cl_snake.cpp:

Code:
// constructor
cl_snake::cl_snake(void)
{
   colors[2] = 4;
   field_size = 10;

   printf("Foo: %d ", colors[2]);
}
Nun ratet mal, was mir ausgegeben wird. Ich sag's euch: 10 Es wird immer der Wert von field_size ausgegeben, bis ich da mal draufgekommen bin, das hat mich nun Stunden gekostet.

Was ist da denn los? Zwischendrin verändere ich ja keine Variablen und mit Pointern arbeite ich auch nicht direkt.

Verwirrt grüßt
Matze

Edit: Ich glaub ich hab's, das Array geht von 0 bis 1, mal testen.
Edit 2: ja das war's, oh Mann!
Edit 3: Aber ich verstehe dennoch nicht, wieso colors[2] den Wert der darauffolgenden Variablen enthält. Kann mir das jemand erklären?
  Mit Zitat antworten Zitat
ZiMD

Registriert seit: 9. Apr 2007
2 Beiträge
 
#2

Re: [C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 17:54
Weil die Variable vermutlich so auf dem Stack liegen:
[...]
colors[0]
colors[1]
field_size
field_width
field_height
[...]
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 18:03
Ja, das könnte sein, was mich aber wundert ist, dass der Index eines Arrays, den es nicht gibt, dann auf die nächste Speicheradresse zeigt und nicht irgendein Fehler kommt wie in Delphi. Aber vermutlich wird das so sein.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 18:10
In Assembler sieht das ungefähr so aus, dass ein Array-Index als Displacement gesehen wird, das heißt, ein Array-Index wird mit der Größe eines einzelnen Feldes (hier 4 Byte) multipliziert und als Displacement zum 0. Element betrachtet. Also ist das 2. Array-Element in diesem Fall das, was 2*4 Byte=8 Byte hinter dem 0. Element liegt, und das ist nunmal zufällig dein int field_size.

EDIT: Delphi zeigt übrigens das gleiche Verhalten bei deaktivierten Range-Checks, aber nur, wenn der Index erst zur Laufzeit feststeht. Ansonsten beschwert sich der Compiler sofort. In C/C++ beschwert er sich nicht, weil dieser Effekt teilweise sogar ganz nützlich sein kann, etwa, wenn man ein Dateiformat einliest.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 18:10
Moin Matthias,

es wird wohl kein Fehler angezeigt, wenn Du nicht angibst, das auf solche Fehler geprüft werden soll.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [C++] Wer verändert da meinen Variablenwert? (erledigt)

  Alt 5. Mai 2007, 18:16
@Manuel: Ach so ist das, danke.
@Chris: Ja stimmt, ich habe jedoch die Standard-Compilereinstellungen belassen und da ist das wohl deaktiviert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz