Einzelnen Beitrag anzeigen

Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#1

Bug beim Memory-Management von WideStrings?

  Alt 29. Apr 2005, 16:21
Folgender Code führt bei der Widestring-Version zu einer Änderung des const-Parameters in der Funktion beim ersten Aufruf der Copy-Funktion.

Delphi-Quellcode:
procedure DoVarConstBug(var Param1, Param2: String; const Value: String); overload;
begin
  Param1 := '';
  Param2 := '';
  if 0 < Pos( '.', Value) then
  begin
    Param1 := Copy( Value, 1, Pos( '.', Value)-1);
    Param2 := Copy( Value, Pos( '.', Value)+1, Length( Value));
  end;
end;

procedure DoVarConstBug(var Param1, Param2: WideString; const Value: WideString); overload;
begin
  Param1 := '';
  Param2 := '';
  if 0 < Pos( '.', Value) then
  begin
    Param1 := Copy( Value, 1, Pos( '.', Value)-1);
    Param2 := Copy( Value, Pos( '.', Value)+1, Length( Value));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Str, Str2: String;
  wStr, wStr2: WideString;
begin
  str := 'Teil-1.Teil-2';
  DoVarConstBug(Str2, Str, Str);

  wStr := 'Teil-1.Teil-2';
  DoVarConstBug(wStr2, wStr, wStr);
  ShowMessage(Format('String: %s <-> WideString: %s', [Str, wStr]));
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat