Один из моих коллег показывает мне код, написанный в Delphi-XE XE Version 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.