Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.457 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Unerklärbare Zugriffsverletzung

  Alt 21. Mär 2014, 09:05
Die richtige Konstante ist hier 'Max_Path' und nicht 'MaxChar'.
Der Buffer 'path' wird nicht gelöscht und das Ergebnis von 'SHGetFolderPath' nicht ausgewertet.
In dieser Kombination kann StrPas einen riesigen String voller Speichermüll zurückgeben oder sogar eine Zugriffsverletzung auslösen.
Man könnte das z.B. so lösen:
Delphi-Quellcode:
function AppDataPath: AnsiString;
const
  SHGFP_TYPE_CURRENT = 0;
begin
  SetLength(Result, Max_Path);
  FillChar(Result[1], Max_Path, 0);
  SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, PAnsiChar(Result));
  SetLength(Result, StrLen(PAnsiChar(Result)));
  Result := Result + '\VPUpdater\';
end;
  Mit Zitat antworten Zitat