AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetLength

Ein Thema von Pseudemys Nelsoni · begonnen am 9. Dez 2004 · letzter Beitrag vom 9. Dez 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

SetLength

  Alt 9. Dez 2004, 01:01
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#2

Re: SetLength

  Alt 9. Dez 2004, 01:23
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: SetLength

  Alt 9. Dez 2004, 06:11
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: SetLength

  Alt 9. Dez 2004, 06:31
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: SetLength

  Alt 9. Dez 2004, 07:01
Zitat von Sprint:
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".
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: SetLength

  Alt 9. Dez 2004, 07:06
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: SetLength

  Alt 9. Dez 2004, 07:57
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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#8

Re: SetLength

  Alt 9. Dez 2004, 08:04
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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: SetLength

  Alt 9. Dez 2004, 09:59
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 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