Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi for-Schleifen - Compiler meint es _zu_ gut! (https://www.delphipraxis.net/108789-schleifen-compiler-meint-es-_zu_-gut.html)

Neutral General 19. Feb 2008 16:49


for-Schleifen - Compiler meint es _zu_ gut!
 
Hi,

Folgende Situation:

Delphi-Quellcode:
procedure T3D2File.LoadFromFile(const Filename: PChar);

  procedure ReadHeader(..:);
  var k: Integer;
  begin
    for k:= 0 to 2 do // <---
    begin                          
      Read(AHeader.Lights[k].Active,SizeOf(Word));
      AHeader.Lights[k].Active := SwapWord(AHeader.Lights[k].Active);
    end;
  end;

var i: Integer;
begin
  // Code
  ReadHeader(...);
  // Code
end;
Und die Schleife fängt bei 3 (!) an und hört bei 1 auf! Der Compiler kann ja meinetwegen optimieren (ich schätze daher kommt das) aber doch nicht bei sowas o.O :wall: :roll:

Gruß
Neutral General

dominikkv 19. Feb 2008 17:04

Re: for-Schleifen - Compiler meint es _zu_ gut!
 
eventuell ein begin..end vergesen?

Neutral General 19. Feb 2008 17:06

Re: for-Schleifen - Compiler meint es _zu_ gut!
 
Zitat:

Zitat von dominikkv
eventuell ein begin..end vergesen?

Oh sorry.. das warn copy&paste Fehler .. jetzt ist es richtig (so wies original im Code steht)

jbg 19. Feb 2008 17:08

Re: for-Schleifen - Compiler meint es _zu_ gut!
 
Zitat:

Zitat von Neutral General
Der Compiler kann ja meinetwegen optimieren (ich schätze daher kommt das) aber doch nicht bei sowas o.O :wall: :roll:

Abgesehen vom fehlenden begin/end (was ich mal als Tippfehler annehme) dürfte zwar k rückwärts laufen, aber der temporäre Array-Zeiger, den der Compiler anlegt, dafür vorwärts.

Gruß
Neutral General[/quote]

Neutral General 19. Feb 2008 17:13

Re: for-Schleifen - Compiler meint es _zu_ gut!
 
Hi,

Naja...

Delphi-Quellcode:
for k:= 0 to 2 do
  FData.Lights.Add(AHeader.Lights[k].x/100,
                   AHeader.Lights[k].y/100,
                   AHeader.Lights[k].z/100,
                   AHeader.Lights[k].Brightness);
Auch hier spuckt mir der Debugger

k=3 aus (beim ersten durchlauf)

und

AHeader.Lights[k=3].Brightness = 412

statt

AHeader.Lights[0].Brightness = 3

PS: Und dort gibts auch ne AV.

jbg 19. Feb 2008 17:15

Re: for-Schleifen - Compiler meint es _zu_ gut!
 
Schalte doch mal die Code-Optimierung aus, dann sollte der Debugger bessere Werte bringen. Wenn es dann noch kracht, liegt der Fehler nicht am Optimierer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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