动态数组的无效指针操作

Invalid Pointer Operation with Dynamic Array

大家好...一旦我尝试 运行 这段代码,我就遇到了 'invalid pointer operation' 错误,问题是什么?它应该将该文本文件中的那些名称按字母顺序排序(学校项目)。

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.

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

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

显然所有索引都需要更改为从 0 开始。

我把数组的名字改成了arr,因为array是关键字。

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

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