was soll das ?

ersteinmal Arne Buchwald, tut mit Leid wird nicht mehr vorkommen

ok, hier ist ersteinmal der Ausschnitt aus dem Code in dem die Werte der Variable tmpFeld wahllos verändert werden, also ich werde hier alle zugriffe auf tmpFeld angeben, so:

TFeld = record
x1, y1, x2, y2 : integer;
end;

...

TfrmMain = class(TForm)
...
private
tmpFeld : TFeld;
...
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
...
// Initialisierung
tmpFeld.x1 := 0;
tmpFeld.y1 := 0;
tmpFeld.x2 := 0;
tmpFeld.y2 := 0;
end;

procedure TfrmMain.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
tmpFeld.x1 := x;
tmpFeld.y1 := y;
end;

procedure TfrmMain.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
tmpFeld.x2 := x;
tmpFeld.y2 := y;
end;

procedure TfrmMain.add1Click(Sender: TObject);
begin

// ok und an dieser Stelle entspricht tmpFeld.x1 dem Wert von tmpFeld.x2 und
// tmpFeld.y1 von tmpFeld.y2 was garnicht sein kann

if (tmpFeld.x1 <> tmpFeld.x2) and (tmpFeld.y1 <> tmpFeld.y2) then
...
end;

ok soweit das, ich hatte im laufe der lertzen 5 (solange arbeite ich schon mit Delphi) solche Probleme (zwar selten die die tratten aber auf), und das mit der Schleife war folgendermaßen,

for i := 0 to n do
...

ok die würde von 0 bis n zählen, NORMALER weise was die aber nicht tat, die zählte nähmlich von n bis 0 ... tja

ansonsten kann ich nur das was Gawayn wiederholen, und Hinterwäldler .. das war echt Frech
 
Kann das nicht auch auf eine fehlerhafte Installation zurückzuführen sein, oder muss das immer gleich ein Bug sein? Ich hab das jedenfalls noch nie gesehen, daher kann ich nur sagen, dass es solche Bugs nicht bei jeder Installation gibt. Also kann es logischerweise nicht am Hersteller liegen.
In der Tat ist es sehr gut möglich, dass dieser Bug nicht bei jeder Installation auftritt (und das denke ich auch), aber es ist überhaupt nicht unlogisch, dass das nicht am Hersteller liegen kann. Wenn ich ein Programm schreibe, das auf Maschinen mit der Netzwerkkarte XY Fehler produziert, hat mein Programm einen Bug, und das läge dann an mir, dem "Hersteller". Wenn ich diesen Bug kenne, nenne ich ihn ein "Known Issue", ein Bug bleibt er aber.

Eine fehlerhafte Installation ist natürlich auch eine Möglichkeit, wenngleich vielleicht unwahrscheinlich, da man sich zunächst schwer vorstellen kann, dass aus solchen Gründen der Debugger Variablen falsch anzeigt. Aber wer weiß.

Als Frechheit bezeichne ich es, mir zu sagen, dass das, was ich mit eigenen Augen in meinem Debuggerfenster gesehen habe, Einbildung von mir sei, weil ich nicht in der Lage sei, eine For-Schleife richtig zu verstehen.

Gawayn
 
Zuletzt bearbeitet:
Als Frechheit bezeichne ich es, mir zu sagen, dass das, was ich mit eigenen Augen in meinem Debuggerfenster gesehen habe, Einbildung von mir sei, weil ich nicht in der Lage sei, eine For-Schleife richtig zu verstehen.
Verständlich, das wollte ich aber so auch nicht sagen. Ich wollte nur sagen, dass ich es nie erlebt habe, und daher kann man wohl auch sagen, dass die Software grundsätzlich von Herstellerseite dahingehend richtig funktioniert.
 
Hallo Leute

Habe ich da was verkehrtes gesagt?

Und wie kommst du darauf, dass dieser Bug bei TURBO PASCAL 3 schon drin gewesen sein muss? Jetzt geht's los, echt.
@Gawayn: Weil sich dieser Code seit fast 16 Jahren kaum verändert hat. Würde deine Annahme stimmen, hätte Borland diesen angeblichen Bug viel später eingefügt.
In der Delphihilfe habe ich zur FOR-Anweisung folgendes gefunden:
Zähler ist eine lokale Variable ordinalen Typs ohne Qualifizierer. Sie wird in dem Block deklariert, in dem die for-Anweisung enthalten ist.
Eine ähnliche Formulierung fand ich übrigens auch im Handbuch für "TP von A-Z" von Michael Kneisl aus dem Jahr 1992.
Wenn also die Variable nicht im gleichen Block deklariert ist, dann macht Pascal irgend was, nur nicht das was es soll. Das muß man also beachten!
 
Tritt der Fehler nur im Debugger auf?

Dann könnte es was mit der sogenannten Optimierung zu tun haben.
In einer Schleife bspw, in der der Index nicht weiter verwendet wird (also kein Array mit dem Index angesprochen wird) könnte ich mir vorstellen, dass der interne Optimierer schlicht andere Laufvariablen-Werte verwendet, da es ja nur auf die Anzahl der Durchläufe ankommt.

vop
 
Wie ich in einem Experiment festgestellt habe, ist es ungefähr so, wie vop sagt, aber nicht ganz. Eine Schleife muss, damit sie rückwärts läuft, eine Indexvariable verwenden, die im restlichen Block KEIN EINZIGES MAL mehr benötigt wird, also weder innerhalb der Schleife, noch außerhalb der Schleife. Dann läuft die Schleife rückwärts. Ich nehme an, der Compiler ersetzt intern die For-Schleife gegen eine While-Schleife, so dass sie dann rückwärts läuft. So, das Geheimnis ist gelüftet!

@Hinterwälder:
Weil sich dieser Code seit fast 16 Jahren kaum verändert hat. Würde deine Annahme stimmen, hätte Borland diesen angeblichen Bug viel später eingefügt.
Turbo Pascal DREI (ich wiederhole, DREI) ist etwas anderes als Delphi. In Demut werde ich für 2 Sekunden schweigen, wenn mir jemand zeigen kann, dass Delphi größtenteils den Code aus Turbo Pascal DREI für DOS verwendet.
Wenn also die Variable nicht im gleichen Block deklariert ist, dann macht Pascal irgend was, nur nicht das was es soll. Das muß man also beachten!
Hinterwäldler, ich habe den Eindruck, dass du nicht weißt, was eine For-Schleife technisch eigentlich ist. Was du sagst, ist nicht korrekt.

Gawayn
 
Zuletzt bearbeitet:
Ich möchte hier nur noch bemerken, dass ich die angesprochenen Probleme auch schon festgestellt habe... :)
 
Original geschrieben von Gawayn
Wie ich in einem Experiment festgestellt habe, ist es ungefähr so, wie vop sagt, aber nicht ganz. Eine Schleife muss, damit sie rückwärts läuft, eine Indexvariable verwenden, die im restlichen Block KEIN EINZIGES MAL mehr benötigt wird, also weder innerhalb der Schleife, noch außerhalb der Schleife. Dann läuft die Schleife rückwärts. Ich nehme an, der Compiler ersetzt intern die For-Schleife gegen eine While-Schleife, so dass sie dann rückwärts läuft. So, das Geheimnis ist gelüftet!
Gawayn

Womit es wieder heißt:

It's not a bug, it's a feature! :-)

vop
 
Ich weis zwar nicht, was jetzt hier noch so geschrieben steht. (hatte kein Bock mir alles durchzulesen :))

Trotzdem die Rechtschreibung des urspünglichen Posts katastrophal ist, muss ich mich in diesem Punkt anschließen: Delphi (5 allerdings) ist verbuggt! Und: Nein es liegt nicht an der Installation. Schleifen laufen teilweise rückwärts und Variablenwerte ändern sich auf merkwürdige Art und Weise. Die Probleme lösen sich meistens wenn man eine neues Projekt beginnt und den Quellcode just kopiert. Ich denke, dass das an einem Fehler im Speichermanagement liegt. Aber wen es stört der wendet sich am besten direkt an Borland. Ich bin einfach auf C++ umgestiegen. :)

Mit freundlichen Grüssen

Matthias Nordwig
 
Zurück