使用动态数组的无效指针操作

时间:2015-04-09 19:51:24

标签: arrays delphi sorting dynamic pascal

Heloo guys ...一旦我尝试运行此代码,我就会遇到一个无效的指针操作'错误,有什么问题?它应该将该文本文件中的名称按字母顺序排序(学校项目)。

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;
var
  names : TextFile;
  count : integer=0;
  array : array of string;
  i : integer;

Procedure Load;
 begin
  Reset(names);
  SetLength(array, count - 1);
  for i := 1 to count do ReadLn(names, array[i]);
 end;

begin
  AssignFile(names, 'names.txt');
  Reset(names);
    While not EoF(names) do
      begin
      ReadLn(names);
      Inc(count);
      end;
   Load;
   for i := 1 to count do WriteLn(array[i]);
   ReadLn;
   CloseFile(names);
   Erase(names);
end.

1 个答案:

答案 0 :(得分:6)

动态数组从零开始。您需要将长度设置为count并从0迭代到count-1

SetLength(arr, count);
for i := 0 to count-1 do
  ReadLn(names, arr[i]);

显然,所有索引都需要更改为0。

我将数组的名称更改为arr,因为array是关键字。

不要尝试继续使用基于1的索引。这样做会让你头疼不已。

此外,您应该启用范围检查编译器选项。如果您访问数组越界,这样做将在运行时产生信息错误。