![]() |
SetLength
tag,
Delphi-Quellcode:
wieso gibts bei obigem code keinen fehler? ich setze den string auf die länge 1 und kann [2] trotzdem ansprechen?
procedure TForm1.Button1Click(Sender: TObject);
var s: string; begin setlength(s, 1); s[1] := 'i'; s[2] := 'h'; edit1.Text := s; end; |
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. |
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.
|
Re: SetLength
Zitat:
|
Re: SetLength
Zitat:
|
Re: SetLength
Zitat:
|
Re: SetLength
Zitat:
|
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.
|
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 23:52 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