Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zugriffsverletzung bei Schleife

  Alt 16. Apr 2009, 12:03
p := PChar(Text); Bei einem leeren Text '' ist p an dieser Stelle nil.
Jeder Zugriff auf p^ würde jetzt zu einer Zugriffsverletzung führen.

In deinen Schleifen wird nie überprüft ob das Ende des Textes erreicht wurde (z.B. p^ = #0).
Dann müsste abgebrochen werden.

Delphi-Quellcode:
...
    Inc(p);
  until p^ = ':';
Diese Stelle wird nur erreicht wenn p^ = ':' ist.
Durch Inc(P) ist die nachfolgende Bedingung nie erfüllt, es sei denn, es stehen zwei Doppelpunkte nacheinander.


Delphi-Quellcode:
function Extract(Text: string; WordPos: Word): string;
var
  p: PChar;
begin
  p := PChar(Text);
  if Assigned(p) then
  begin
    while (p^ <> #0) and (WordPos > 0) do
    begin
      if p^ = ':then
        Dec(WordPos)
      else if WordPos = 1 then
        Result := Result + p^;
      
      Inc(p);
    end;
  end;
end;
Na da war jemand bereits schneller...
  Mit Zitat antworten Zitat