Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Whats that ?!?!??!? DELPHI spinnt !! (https://www.delphipraxis.net/17369-whats-delphi-spinnt.html)

stoxx 4. Mär 2004 01:50


Whats that ?!?!??!? DELPHI spinnt !!
 
Man möge sich mal diesen Text eins zu eins kopieren !
(Darf ich dann bei der Umstellung auf 64 Bit Technik immer mit solchen Problemen rechnen ??)
Was ist die Begründung für solch unerklärliches Verhalten ?
(Man möge auch mal word, byte oder sonstwas einsetzen)

Delphi-Quellcode:
procedure TFormTS.Button1Click(Sender: TObject);
var sl : TSTringlist;
    i : cardinal;
begin
 sl := Tstringlist.Create;
 for i := 0 to sl.Count -1 do
 begin
   showmessage('Hähhh ?!?!  Warum bin ich hier ?   ' +   inttostr(i));
 end;
 sl.Free;
end;
[edit=r_kerber] Mfg, r_kerber[/edit]

Luckie 4. Mär 2004 02:33

Re: Whats that ?!?!??!? DELPHI spinnt !!
 
Kompilier das mal und lass es laufen:
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  sl : TSTringlist;
  i : Byte;

begin
 sl := Tstringlist.Create;
 for i := 0 to sl.Count - 1 do
 begin
   writeln(i);
 end;
 sl.Free;
 readln;
end.
Die Schleife läuft von 0 bis -1. Wo ist da dein Problem? Da i erst -1 wird, wenn es zu einen Überlauf kommt, läuft die Schleife eben bis dahin. In diesem Fall bis 255.

Und wähl bitte einen aussagekräftigeren Titel.

Jens Schumann 4. Mär 2004 07:27

Re: Whats that ?!?!??!? DELPHI spinnt !!
 
Hallo,
interessanter Fall. Jetzt arbeite ich schon so lange mit Pascal/Delphi, aber
das ist mir noch nicht passiert.
Das liegt daran, dass ich schon immer Schleifenzähler als Integer deklariert habe.
Eigentlich ohne wirklich darüber nachzudenken.
Integer ist ein Type, der auch negative Werte annehmen darf. Cardinal eben nicht.
Dann läuft das Beispiel auch so wie erwartet. Ist ja auch irgendwie logisch (siehe Luckie's Posting)

Tyrael Y. 4. Mär 2004 08:09

Re: Whats that ?!?!??!? DELPHI spinnt !!
 
Ich dachte in Delphi gibst keinen Überlauf :gruebel:

ist echt interresant...
...bei welchen Datentypen ist denn Überlauf möglich?

bei Integer gehts ja nich...

Edit: ..ähh schon gut, Jens ha es ja hingeschrieben, ist ncoh bissel früh glaub ich, gähn

stoxx 4. Mär 2004 12:09

Re: Whats that ?!?!??!? DELPHI spinnt !!
 
Hey, Danke Luckie, auf den Überlauf hätte ich auch alleine kommen können :wall:
aber war schon spät ! und ich dachte anfangs, es hätte was mit den unterschiedlichen Datentypen zu tun :-)
(nich genug rumprobiert)
na jut, peinliche Frage :spin2:
aber wenigstens aufgeklärt.

Luckie 4. Mär 2004 13:38

Re: Whats that ?!?!??!? DELPHI spinnt !!
 
Auch bei Integers gibt es einen Überlauf, nämlich dann, wenn der Wertebereich des datentyps erschöpft ist. Was du meinst ist, dass es keinen BufferOverflow gibt, weil, wenn man AnsiStrings benutzt der Längenzähler mitgeführt wird, den es unter C/C++ nicht gibt. Da sind Zeichenfolgen Charackter Arrays.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz