type mA=array[1..1] of TRab;
pA=^mA;
var A: pA;
Аналоги динамических массивов в TP, PascalABC
Pascal не поддерживает. Используют аналоги:
Код:
далее с к A можно применить выделение памяти GetMem
и обращаться к массиву через указатели типа A^
В Примере классов с использованием этого такое выделение памяти приводит к
сообщению о выходе за граница массива
Код:
type
Trab=class
suc: Trab;
FIO: string;
NK: kf;
stavka: integer;
constructor Create(Fam:string;nkaf:integer);
end;
type mA=array[1..1] of TRab;
pA=^mA;
Type Tarr = class {динамический массив элементов Trab}
public
n: integer;
A: pA;
constructor Create;
procedure add(val: Trab);
end;
procedure Tarr.add(val: Trab);
var siz:word;
begin
n:=n+1; siz:=n*SizeOf(mA); GetMem(A,siz);//здесь при n>1 ош выход за границы массива
A^[n]:=val;
end;
Trab=class
suc: Trab;
FIO: string;
NK: kf;
stavka: integer;
constructor Create(Fam:string;nkaf:integer);
end;
type mA=array[1..1] of TRab;
pA=^mA;
Type Tarr = class {динамический массив элементов Trab}
public
n: integer;
A: pA;
constructor Create;
procedure add(val: Trab);
end;
procedure Tarr.add(val: Trab);
var siz:word;
begin
n:=n+1; siz:=n*SizeOf(mA); GetMem(A,siz);//здесь при n>1 ош выход за границы массива
A^[n]:=val;
end;
Как быть?
Оформите код, нечитаемо
Рад юы, да не могу
..[ /code] (прямой слэш поставьте вместо обратного).
Значится:
1. Не понятно начальное значение n
2. При динамическом выделении индексацию массива стоит бы делать с 0
3. Сделайте тип так: type mA=array[0..65535] of TRab; (можно альтернативно отключить range checks но насчет TP не уверен уже)
4. Метод add, если задуман как понимаю его я, и в этом случае будет некорректно составлять массив - после каждого вызова
Как и любой вектор, его можно использовать как динамический массив, что и делается в самом Turbo Vision.