![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
eug |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
полноценного открытого массива скажем type arr=array of integer;
Pascal не поддерживает. Используют аналоги:
type mA=array[1..1] of TRab;
pA=^mA;
var A: pA;
далее к A можно применить выделение памяти GetMem и обращаться к массиву через указатели типа A^[i] В Примере классов с использованием этого такое выделение памяти приводит к сообщению о выходе за граница массива:
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);
A^[n]:=val; //здесь при n>1 выскакивает ошибка выход за границы массива
end;
Сообщение отредактировано: eug - 21.06.2011 14:26 |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата type mA=array[1..1] of TRab;
Либо отключай контроль type mA=array[1 .. 65520 div sizeof(TRab)] of TRab;
, и работай совершенно спокойно...А PascalABC прекрасно работает с дин. массивами, я не знаю, зачем понадобилось ТАМ применять подобную технику, если есть вот такая: var
a: array of Integer;
// ...
a := new integer[20];
Сообщение отредактировано: IUnknown - 21.06.2011 14:46 |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 2:12 |