{$R-} { Отключаем проверку компилятором границ массива. Необходимо для дин. массивов в Турбо Паскале } Type MyType={здесь описываешь тип элемента массива, скажем} Word; Type MyArray=Array[1..1] of MyType; {Описываем массив всего из 1 элемента} MyArrayPtr=^MyArray; Var DynamicArray: MyArrayPtr; {Это указатель на наш динамически массив} Count, {Это вводимый размер массива} I,Size: Word; Begin {Вводим размер массива} Write('Число элементов массива: '); ReadLn(Count); { выделяем под него память: Count x РазмерТипа } Size:=Count*SizeOf(MyType); GetMem(DynamicArray,Size); {заполняем наш массив значениями} For I:=1 to Count do DynamicArray^[I]:=I; For I:=1 to Count do Write(DynamicArray^[I]:4); {освобождаем зарезервированную память для массива} FreeMem(DynamicArray,Size) End.
Сначала резервируется место в памяти для строк матрицы, а потом для каждой строки резервируется место под каждый столбец.
Тут приведён пример для квадратной матрицы (Count x Count):
{ (C) volvo877 } {$R-} Type MyType = Word; Type PMyVector = ^MyVector; { "Строка" динамической матрицы } MyVector = Array[1 .. 1] of MyType; MyArrayPtr = ^MyArray; { Сама матрица - представляется как массив указателей на "строки" } MyArray = Array[1 .. 1] of PMyVector; Var DynamicArray: MyArrayPtr; { Указатель на матрицу } Count, I,J,Size: Word; Begin Write('Число элементов массива: '); ReadLn(Count); { Выделяем память под указатели на "строки" } GetMem(DynamicArray, Count * SizeOf(PMyVector)); { И для каждой "строки" - выделяем память для хранения данных } For i := 1 To Count Do GetMem(DynamicArray^[i], Count*SizeOf(MyType)); For I:=1 to Count do { строки } For J:=1 to Count do { столбцы } { Немного изменяется способ обращения к элементу матрицы } DynamicArray^[I]^[J]:=I*J; For I:=1 to Count do begin WriteLn; For J:=1 to Count do Write(DynamicArray^[I]^[J]:4); end; { Освобождаем память в обратном порядке: } { Сначала - удаляем все "строки" } For i := 1 To Count Do FreeMem(DynamicArray^[i], Count*SizeOf(MyType)); { А теперь и указатели на них ... } FreeMem(DynamicArray, Count * SizeOf(PMyVector)); End.