动态数组的无效指针操作
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 开始的索引。这样做会让你头疼不已。
您还应该启用范围检查编译器选项。如果您越界访问数组,这样做会在运行时产生信息性错误。
大家好...一旦我尝试 运行 这段代码,我就遇到了 '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 开始的索引。这样做会让你头疼不已。
您还应该启用范围检查编译器选项。如果您越界访问数组,这样做会在运行时产生信息性错误。