【发布时间】:2018-04-14 10:34:37
【问题描述】:
您好,我需要有关我编写的一段代码的建议。这是我的 delphi7 学校教科书中的一项活动,所以你可以想象我对帕斯卡还是新手。 我的程序运行良好并获得了我需要的结果,但我收到了一个奇怪的消息: 运行时出现“无效的浮点运算”消息,而不会导致程序崩溃。以我有限的知识,我找不到这个错误背后的原因。这很令人困惑,因为我没有使用任何实数,但请看一下。 如果您需要更多信息,请告诉我 提前谢谢你,我愿意学习!
private arrLearners : array of string; arrMod : array of string;
procedure TfrmPortfolios.btnEnterClick(Sender: TObject);
var
numL,k,d,a : integer;
l :string;
begin
k:=0;
numL:=0;
repeat
numL := StrToInt(InputBox('Enter names','How many learners in Subject?
(Max 30):','30'));
until
numL<=30;
SetLength(arrLearners, numL);
for k:=0 to numL-1 do
begin
arrLearners[k]:='Student No'+IntToStr(k+1);
end;
k:=0;
d := numL div 5; //used to see for every which learner will go to moderation. I.e if d=3 then every third student.
if numL <=9 then // below 9, d=1 then it's every student anyways
begin
for k:=0 to NumL-1 do
begin
SetLength(arrMod,NumL);
arrMod[k]:=arrLearners[k];
end;
end
else
begin
a := numL div d;
SetLength(arrMod, a);
for k:=0 to a-1 do
begin
arrMod[k] := arrLearners[(k*d) +1];
end;
end;
k:=0;
redOutput.Lines.Add('Students sent for moderation:'+#13);
for k:=0 to numL-1 do
begin
l:= arrMod[k];
redOutput.Lines.Add(l);
end;
end;
【问题讨论】:
-
我注意到我的结果有误,但我修复了它,但仍然出现浮动错误:arrMod[k] := arrLearners[(k*d)+d-1 ];
-
如果您从 Delphi 7 IDE 运行,它是否会在消息后将您弹出到代码中的特定位置?您显示的代码中没有任何显式浮点值或操作,因此问题可能出在其他地方。
-
FWIW,有一些有用的链接向人们展示了如何调试。这是一个:Delphi debugging for dummies,这是另一个:Debug faster, Debug smarter 都来自不同的 CodeRage 事件。
-
请注意,当
numL大于9时,arrMod的大小为numL div d。 (即numL div 5)。所以它小于numL。但是,在最后几行中,您正在从 0..numL-1 查找 arrMod 的值 - 因此您正在尝试访问高于数组实际大小的成员。这可能导致意外行为(“越界”问题)
标签: delphi runtime-error delphi-7 pascal