Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SetLength (https://www.delphipraxis.net/35569-setlength.html)

Pseudemys Nelsoni 9. Dez 2004 01:01


SetLength
 
tag,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  setlength(s, 1);
  s[1] := 'i';
  s[2] := 'h';
  edit1.Text := s;
end;
wieso gibts bei obigem code keinen fehler? ich setze den string auf die länge 1 und kann [2] trotzdem ansprechen?

Sprint 9. Dez 2004 01:23

Re: SetLength
 
Weil dein String nur ein Zeichen lang ist, aber du zwei verändern willst.


Edit: Hab die Frage falsch gelesen. Weil Delphi wohl nicht prüft ob der String wirklich zwei Zeichen lang ist. Sondern versucht deinen Wunsch nachzukommmen. Kann aber auch zu einer Speicherschutzverletzung kommen.

jim_raynor 9. Dez 2004 06:11

Re: SetLength
 
Du müsstest in den COmpileroptionen die Bereichsprüfung aktivieren, dann würde auch dort ein Fehler kommen. Ansonsten ist es das gleiche Problem wie bei Arrays. Dort wird auch nicht geprüft auf welchen Index zugegriffen werden darf. Solange der Speicherbereich dir gehört wird auch keine Zugriffsverletzung auftreten. Nur wenn der Bereich hinter dem Array einer anderen Anwendung gehört, dann knallt es.

Sprint 9. Dez 2004 06:31

Re: SetLength
 
Zitat:

Zitat von jim_raynor
Nur wenn der Bereich hinter dem Array einer anderen Anwendung gehört, dann knallt es.

Das ist nun ja nicht möglich.

jim_raynor 9. Dez 2004 07:01

Re: SetLength
 
Zitat:

Zitat von Sprint
Zitat:

Zitat von jim_raynor
Nur wenn der Bereich hinter dem Array einer anderen Anwendung gehört, dann knallt es.

Das ist nun ja nicht möglich.

Warum nicht? Vielleicht war auch andere Anwendung der falsche Begriff. Vielleicht sollte man besser sagen "wenn der Bereich hinter dem Array noch nicht von der eigenen Anwendung reserviert wurde".

Sprint 9. Dez 2004 07:06

Re: SetLength
 
Zitat:

Zitat von jim_raynor
Vielleicht sollte man besser sagen "wenn der Bereich hinter dem Array noch nicht von der eigenen Anwendung reserviert wurde".

Das klingt schon besser.

Pseudemys Nelsoni 9. Dez 2004 07:57

Re: SetLength
 
Zitat:

Weil dein String nur ein Zeichen lang ist, aber du zwei verändern willst.
wenn ich ihn mit setlength auf 2 setze kann ich aber auch nicht auf 3 zugreifen, also dürfte ich auch nicht auf 2 zugreifen können wenn ich ihn auf länge 1 setze

jim_raynor 9. Dez 2004 08:04

Re: SetLength
 
Ich denke meine Beiträge sollten das Problem doch klar machen. Es wird zu einem Problem, wenn der Speicherbereich hinter dem String nicht von deiner Anwendung reserviert wurde. Wann wie das passiert ist fast nur davon abhängig, was du davor machst. Aber vorhersagen kann man das nie.

ibp 9. Dez 2004 09:59

Re: SetLength
 
ich denke, dass beim bereitstellen des strings der volle speicherbereich bereitgestellt wird und wenn du ihn dann später "kürzt" ist er noch nicht für anderes freigegeben.


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