To be quite honest, there is only 1 reason that TPointerList has size that big: Range checking, and even then it would propably just give a compiler hint not error.
It is declared like this currently:
TPointerList = array[0..MaxListSize - 1] of Pointer;
But for its actual use and range checking disabled it could have been:
TPointerList = array[0..0] of Pointer;
This is the more relevant part:
PPointerList = ^TPointerList;
Ok here's 1 example:
procedure NullArray(const arr: PPointerList; count: integer);
var k: integer;
begin
for k:=0 to count-1 do
arr^[k]:=nil;
end;
procedure A;
var
arr: array[0..9] of pointer;
dynArr: array of pointer;
begin
NullArray(@arr, 10);
Setlength(dynArr, 10);
NullArray(@dynArr[0], 10);
end;