新手小白求教点数组有关问题

新手小白求教点数组问题
procedure TForm1.quzhi2();
  var
  ASource,BU: string;
  iio: Integer;
  AA,subB: Integer;
  AStrings: TStringList;
  Delimiter: Char; // 分隔符
begin
  try
  ASource := Edit2.Text;
  subB:=0;
  Delimiter := '+';
  AStrings := TStringList.Create;
  AStrings.Delimiter := Delimiter;
  AStrings.DelimitedText := PChar(ASource);
  for iio := 1 to AStrings.Count - 1 do
  begin
  BU:=AStrings.Strings[iio];
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select 角钢 from zhongliangbiao WHERE 材料名称='+BU+'');
  ADOQuery2.Open;
  AA:=strtoint(ADOQuery2.Fieldbyname('角钢').AsString);
  subB:=subB+AA;
  end;
  zhi2:=IntToStr(subB);
  finally
  AStrings.Free;
  end;
以上代码在运行的时候提示我Astrings没有初始化,我看上面那不已经创建了一个数组了吗,怎么会没有初始化呢

------解决方案--------------------
try放错地方了,要放在Create后面

AStrings := TStringList.Create;
try
...
finally
 AStrings.free;
end;

------解决方案--------------------
正确的应当是:
AStrings := TStringList.Create;
try
...
finally
AStrings.Free;
end;

如果把“AStrings := TStringList.Create;”放在try之后,比如:
try
Abort;
AStrings := TStringList.Create;
finally
AStrings.Free;
end;
在执行Abort之后,就不会执行“AStrings := TStringList.Create;”,而直接转去执行AStrings.Free;

所以编译器会警告AStrings可能没有被初始化