同僚の 1 人が、Delphi-XE XE バージョン 15.0.3953.35171 で記述されたコードを見せてくれました。これは、アクセス違反を引き起こすはずだと私は信じています。コードは次のとおりです。
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm3 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
function test:TstringList;
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
var aStrList : TStringList;
begin
aStrList := TStringList.Create;
test;
FreeAndNil(aStrList);
end;
function TForm3.test: TstringList;
var i:Integer;
begin
for i:=0 to 1000 do
Result.Add('aaa');//AV?
end;
end.
aStrList と Result を検査すると、次の結果が得られます。
aStrList: TStringList $12FEDC : $42138A
Result: TStringList $12FEC4 : $B01B90
なぜそれが機能しているのかわかりません。Result.Add はアクセス違反を発生させる必要があります
LE: Debug Build Configuration でのみ動作しているようです。