我正在复习我的一份旧试卷,准备期末考试,为了热爱生活,我不知道该怎么做!该程序早些时候运行,但没有对数组进行排序。现在我得到一个错误说EAccess violation with message: access violation at address 00404BDE
这是我的代码(有点长,也许你可以帮我发现我的错误):
private
{ Private declarations }
iCount : Integer;
arrDams : array [1..200] of string;
Procedure List;
procedure Display;
procedure Sort;
procedure Search (sDam : String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Display; //Display with Numbers
var
k : Integer;
begin
for K := 1 to 200 do
begin
RedOut.Lines.Add (IntToStr(k) + '.) ' + (arrDams[k]));
end;
end;
procedure TForm1.FormCreate(Sender: TObject); // Create
begin
//
end;
procedure TForm1.List; // TextFile to array
var
MyFile : TextFile;
k : Integer;
begin
If FileExists('Dams.txt') <> True
then Application.Terminate;
AssignFile (MyFile, 'Dams.txt');
Reset(MyFile);
For K := 1 to 200 do
begin
Readln(MyFile, arrDams[k])
end;
end;
procedure TForm1.Search(sDam: String); // Search
begin
end;
procedure TForm1.Sort; // Sort;
var
K,L : byte;
sKeep : string;
begin
for k := 1 to iCount -1 do
begin
for l := k + 1 to iCount do
begin
if arrDams[k] > arrDams[L] then
begin
sKeep := arrDams[k];
arrDams[k] := arrDams[L];
arrDams[L] := sKeep
end;
end;
end;
end;
procedure TForm1.btnListClick(Sender: TObject);
begin
List;
Display;
end;
procedure TForm1.btnDisplayClick(Sender: TObject);
begin
display;
sort;
end; //<---------- ERROR OVER HERE!
end.
表单顶部有3个按钮,即Show list
、Make new textfile with list
和Sort list alphabetically
。我正在处理的按钮是对列表进行排序。这篇试卷说我必须制作一个sort procedure
,并且必须在点击Sort Button
时被调用。
感谢的任何建议/帮助
p.S.
你能给我指一个链接吗?他们在那里深入解释了"选择排序"——我对此没有逻辑。。
您没有初始化iCount
。所以它是0。因此iCount-1
就是-1
。但是,循环变量使用Byte
,一种无符号类型。现在,-1
在被解释为无符号Byte
时是255
。如果您一直遵循这一点,则意味着您访问数组超出了范围。实际上,内部循环只执行一次,值l
等于0
,k
等于255
。
如果启用范围检查编译器选项,那么在数组结束时就会遇到运行时错误。
假设您想将iCount
初始化为某个值。我说不清是什么,但你会知道的。
除此之外,停止对循环变量使用无符号类型。将Byte
替换为Integer
。