Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

AW: EIntOverflow bei Generierung von Zeichenketten

  Alt 4. Feb 2012, 14:47
Du speicherst nur am Anfang einmal einen Buschtaben in S, host dir davon den Pointer P und veränderst danach ständig das S.

Und nun rate mal, was passiert ... der Speicher von S ändert sich, er liegt nun also an einer anderen Stelle, aber du bleibst hartnäckig auf der alten Position stehen, schreibst somit in der Wildnis rum und verschrottest somit auch fremden Speicher, welche nicht mehr zum S gehört.


Du mußt also nach Änderung von S auch P aktualisieren, oder laß das unsicher Pointer-Gedöhns.
Delphi-Quellcode:
var
  s: string;
  i, i2: integer;
begin
  s := 'a';
  i2 := 1;
  for i := 1 to 5000 do
  begin
    writeln(s);
    if s[i] = 'zthen
    begin
      s := s + 'a';
      inc(i2);
    end
    else
      inc(s[i2]);
  end;
  writeln('ok');
  readln;
end.
[edit]
@einbeliebigername: Beachte, daß Strings bei 1 und nicht bei 0 beginnen.

[edit2]
i2/j ist ja das letzte Zeichen, also kann man auch das Letzte verwenden, anstatt mitzuzählen.
Delphi-Quellcode:
var
  s: string;
  i: Integer;
begin
  s := 'a';
  for i := 1 to 5000 do
  begin
    WriteLn(s);
    if s[Length(s)] = 'zthen
      s := s + 'a'
    else
      Inc(s[Length(s)]);
  end;
  WriteLn('ok');
  ReadLn;
end.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Feb 2012 um 14:52 Uhr)
  Mit Zitat antworten Zitat