为什么这段代码会在result.create中导致SegFault?

时间:2014-08-13 12:36:30

标签: delphi segmentation-fault freepascal lazarus

我有一个大约10K名字和名单的清单。需要清理的地址,我已设法清理地址,现在扩展程序以满足其他字段,我的代码编译没有任何问题,但是当我尝试运行程序时突出显示以下内容

000000010000DD9E 743d                     je     0x10000dddd 
<SYSTEM$_$TOBJECT_$__$$_CREATE$$TOBJECT+125>

代码中唯一的create命令与一个字符串列表相关,我将其用于存储拆分信息,然后将其转换为变量,然后将其发送到单独的SdfDataSet,我的代码在我处理地址时工作得很好那为什么现在失败了呢?我认为可能是因为需要单独的stringLists但是创建不止一个列表会导致同样的问题。

原谅相当大的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
  title, str1, str2, str3, str4, address : String;
  result : TStringList;

begin
  // Add field to address data set
  AddressData.FieldDefs.Add('Title', ftString); // 0
  AddressData.Schema.Add('Title');
  AddressData.FieldDefs.Add('Fore', ftString); // 1
  AddressData.Schema.Add('Fore');
  AddressData.FieldDefs.Add('Sur', ftString); // 2
  AddressData.Schema.Add('Sur');
  AddressData.FieldDefs.Add('Address', ftString); // 3
  AddressData.Schema.Add('Address');
  AddressData.Active := True;
  AddressData.Edit;

  result.Create;  // This seems to be the problem

  // Begin export
  with Initial_Data do begin
  for i := 1 to RecordCount do
   begin
    RecNo := i;
    title := Fields[13].AsString;
    str1 := Fields[8].AsString;
    str2 := Fields[9].AsString;
    str3 := Fields[10].AsString;
    str4 := Fields[11].AsString;

    // Clean Titles
    // Split at first space or period
    if title <> '' then
      begin
        ExtractStrings([' ', '.'], [' '], PChar(title), result);
        title := result[0];
      end
    else title := null;


    // Concentate Addresses
    // Check markup of string 1
    if (AnsiEndsStr(',', str1) = False) then
      str1 := str1 + ', '
    else
      if (AnsiEndsStr(',', str1) = True) then
        str1 := str1 + ' ';

    // Check markup of string 2
    if (AnsiEndsStr(',', str2) = False) then
      if str3 = '' then
        str2 := str2
      else
        str2 := str2 + ', '
    else
      if (AnsiEndsStr(',', str2) = True) then
        if str3 <> '' then
          str2 := str2 + ' ';

    // Markup for string 3
    if (AnsiEndsStr(',', str3) = False) then
      if str4 = '' then
        str3 := str3
      else
        str3 := str3 + ', '
    else
    if (AnsiEndsStr(',', str3) = True) then
      if str4 <> '' then
        str3 := str3 + ' ';

    // Cleanup final string
    if (AnsiEndsStr('.', str4) = True) then
      begin
        ExtractStrings(['.'], [' '], PChar(str4), result);
        str4 := result[0];
      end
    else
      if (AnsiEndsStr(',', str4) = True) then
      begin
        ExtractStrings([','], [' '], PChar(str4), result);
        str4 := result[0];
      end;

    // Compile address
    address := str1 + str2 + str3 + str4;

    // Add records to address
    with AddressData do
      begin
        RecNo := i;
        Insert;
        Fields[0].AsString := title;
        Fields[3].AsString := address;
        Post;
      end;

    if result[0] <> '' then
    result.Free;

  end; // Close of for loop
end;

  AddressData.Refresh;
end; 

0 个答案:

没有答案