为什么我的字符串数字乘法代码会随机给出奇怪的错误?

我编写了代码来乘以对于 PC 来说太大而无法作为整数处理的数字。该代码在很多时候都在运行和工作,但有时会出现随机错误,例如“无效的指针位置”或“在...处访问冲突”。我想我在某处有逻辑错误,但我似乎找不到。

此外,当我注释掉一些代码来测试问题时,我的一些仅包含数字的字符串已转换为 o 和似乎是普通话符号的组合。我也会包括代码,供感兴趣的人使用。

function TForm3.MuiltStr(x,y: String): String;
var
  XArr: Array of Integer; //array van chars van x se syfers
  AnsArr: Array of String; //array van proses se nommers
  transStr: String;
  I,A: Integer;
  proc: String;
  ansStr: String;
  zeroes: String;
begin
  Setlength(XArr,x.Length);
  Setlength(AnsArr,x.Length);
  for I := 1 to Length(XArr) do
  begin
    XArr[I] := 0;
    AnsArr[I] := '0';
  end;
    
  for I := 1 to x.Length do
  begin
    XArr[I] := StrToInt(x[I]);
  end;
  for I := Length(XArr) downto 1 do
  begin
    zeroes := '';
    for A := y.Length downto 1 do
    begin
      if A < y.Length then zeroes := zeroes + '0';
    
      proc := IntToStr(StrToInt(y[A]) * XArr[I]) + zeroes;
      ansArr[I] := StrPlus(ansArr[I],proc);
    end;
  end;
  for I := 1 to Length(AnsArr) do Memo1.Lines.Add(ansArr[I]);
    
  if x.length >= 2 then
  begin
    for I := Length(AnsArr) downto 2 do
    begin
      if AnsArr[I].length > 1 then
      begin
        Memo1.Lines.Add('//');
        TransStr := Copy(AnsArr[I],1,AnsArr[I].length - 1);
        AnsArr[I] := Copy(AnsArr[I],AnsArr[I].length,1);
        AnsArr[I - 1] := StrPlus(AnsArr[I - 1],TransStr);
      end;
      AnsStr := AnsArr[I] + AnsStr;
      if I = 2 then AnsStr := AnsArr[1] + AnsStr;
    end;
    
    for I := 1 to Length(AnsArr) do
    begin
      Memo1.Lines.Add(AnsArr[I]);
    end;
    
  end
  else
  begin
    AnsStr := AnsArr[1];
  end;
  Result := 'Hier' + AnsStr;
  Delete(XArr,Length(XArr));
  Delete(AnsArr,Length(AnsArr));
end;

下面是更糟糕的代码:

function TForm3.MuiltStr(x,y: String): String;
var
  XArr: Array of Integer;
  AnsArr: Array of String; 
  transStr: String;
  I,x.Length);
  {for I := 1 to Length(XArr) do
  begin
    XArr[I] := 0;
    AnsArr[I] := '0';
  end;
    
  for I := 1 to x.Length do
  begin
    XArr[I] := StrToInt(x[I]);
  end;
  for I := Length(XArr) downto 1 do
  begin
    zeroes := '';
    for A := y.Length downto 1 do
    begin
      if A < y.Length then zeroes := zeroes + '0';
    
      proc := IntToStr(StrToInt(y[A]) * XArr[I]) + zeroes;
      ansArr[I] := StrPlus(ansArr[I],TransStr);
      end;
      AnsStr := AnsArr[I] + AnsStr;
      if I = 2 then AnsStr := AnsArr[1] + AnsStr;;
    end;
    
    for I := 1 to Length(AnsArr) do
    begin
      Memo1.Lines.Add(AnsArr[I]);
    end;
    
  end
  else}
  begin
    AnsStr := AnsArr[1];
  end;
  Result := 'Answer: ' + AnsStr;
  Delete(XArr,Length(AnsArr));
end; 

为了奇怪的结果,我使用 X=1Y=2 运行此程序。

我的 StrPlus 函数没有错误。它只是将两个字符串数字相加。

poiplkj 回答:为什么我的字符串数字乘法代码会随机给出奇怪的错误?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/13525.html

大家都在问