http://lazarus-ccr.sourceforge.net/ - SetLength

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von Mathias »

Bei http://lazarus-ccr.sourceforge.net/docs ... ength.html hat sich ein Fehler eingeschlichen.

Code: Alles auswählen

Program Example85;
 
{ Program to demonstrate the SetLength function. }
 
Var S : String;
 
begin
  FillChar(S[1],100,#32)// Gibt Speicherferletzung
  Setlength(S,100);
  Writeln ('"',S,'"');
end.
Sollte so sein:

Code: Alles auswählen

Program Example85;
 
{ Program to demonstrate the SetLength function. }
 
Var S : String;
 
begin
  Setlength(S,100);
  FillChar(S[1],100,#32);
  Writeln ('"',S,'"');
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von theo »

Stimmt. Machst du einen Bugtracker Eintrag?

Tipp: Das ist ein Fehler in den FPC Docs, nicht in Lazarus (rtl/system/setlength).
http://www.freepascal.org/docs-html/rtl ... ength.html

http://bugs.freepascal.org

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von marcov »

Ich werde es korrigieren in SVN. (es ist übrigens nicht ganz falsch wie es da steht, String im Default Modus ist ein Shortstring, also Platz für 255 Zeichen sind statisch reserviert)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von theo »

marcov hat geschrieben: (es ist übrigens nicht ganz falsch wie es da steht, String im Default Modus ist ein Shortstring, also Platz für 255 Zeichen sind statisch reserviert)

Aber dann bräuchte es kein SetLength?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von mse »

Doch, damit S[0] gesetzt wird.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von theo »

Ach so. Das hatte ich wohl tatsächlich noch nie ausprobiert bei ShortString.

Aber jetzt stehe ich grad auf dem Schlauch. Wo ist meine Fehlüberlegung?
Warum wird hier das abschließende Gänsefüßchen unterdrückt?

Code: Alles auswählen

Var S : String[5];
begin
FillChar(S[1],5,'1');
ShowMessage('"'+S+'"');
end;       


Lazarus 1.5 r48979M FPC 3.1.1 x86_64-linux-gtk 2

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von mse »

Weil hier im Längenbyte S[0] ein zufälliger Wert steht. Also S[0]:= #5 oder setlength(S,5).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von theo »

Was macht denn dann

Code: Alles auswählen

Var S : String[5];


Setzt das kein Längenbyte?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von mse »

Nein. Das reserviert lediglich 6 Byte Speicher.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von theo »

mse hat geschrieben:Nein. Das reserviert lediglich 6 Byte Speicher.


OK, danke. Wieder was gelernt. :wink:

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: http://lazarus-ccr.sourceforge.net/ - SetLength

Beitrag von Mathias »

marcov hat geschrieben:Ich werde es korrigieren in SVN. (es ist übrigens nicht ganz falsch wie es da steht, String im Default Modus ist ein Shortstring, also Platz für 255 Zeichen sind statisch reserviert)

Auf jeden Fall kommt ein SIGSV.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten