Einzelnen Beitrag anzeigen

Benutzerbild von kroimon
kroimon

Registriert seit: 21. Apr 2004
24 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Set of WideChar (TDynamicCharSet)

  Alt 9. Jan 2010, 00:41
Zur Speicherverwaltung: Ah ja, hatte übersehen, dass du ja mit records arbeitest

Zitat von himitsu:
und im Prinzip geht auch sowas:
Delphi-Quellcode:
if TDynamicCharSet(['#', '$']).Contains('a') then
  beep;
if TDynamicCharSet('#$a..z梣儿梈棅棋㌇').Contains('a') then
  beep;
Hm, ja leider eben nicht...
Delphi 2010. Neues VCL-Projekt. TButton hinzugefügt. OnClick:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  TDynamicCharSet(['#', '$']).Contains('$');
end;
Start. Button drücken. Freuen:
Code:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00418441 in Modul 'Project1.exe'. Lesen von Adresse 0574C08C' aufgetreten.

Stack-Trace:
DynSet.TDynamicCharSet.Fill('#$', nil)
DynSet.TDynamicCharSet.Fill(['#'..'$'], nil)
DynSet.TDynamicCharSet.&op_Explicit(['#'..'$'])
Unit1.TForm1.Button1Click(???)
Bis TDynamicCharSet.Fill(Const S: RawByteString; Encoding: TEncoding = nil) geht also alles gut.
Dort wird dann CheckEncode(nil) aufgerufen, wobei Encoding auf _Encoding gesetzt wird, was hier merkwürdigerweise nicht genullt ist, sondern zufällige Werte beinhaltet: (FIsSingleByte:True; FMaxCharSize:1589654467)
Die nächste Zeile (229) crasht dann erwartungsgemäß.

Scheinbar wird bei diesem expliziten Cast das Record nicht mit Nullen gefüllt
Edit: grade nochmal im Debugger überprüft: Beim Aufruf von &op_Explicit ist Result._Encoding schon direkt zu Beginn nicht nil, sondern mit (FIsSingleByte:True; FMaxCharSize:1589654467) gefüllt...

Könnte das noch jemand unter Delphi 2010 testen und bestätigen bitte?
~Stefan
  Mit Zitat antworten Zitat