У FreePascal, Delphi додана цікава можливість опису масивів без вказівки розмірностей і, відповідно, меж зміни індексів:
var IntArray: array of integer;
Багатовимірні динамічні масиви описуються саме як масиви масивів. Наприклад, двовимірний:
type T3DinArray = array of array of Integer; var A. T3DinArray;
Такі масиви є динамічними і спочатку мають нульову довжину. Установка розміру масиву і визначення його під час виконання програми проводиться так само як і для рядків, за допомогою функцій SetLength і Length. відповідно. Елементи в даному випадку нумеруються від нуля.
// У програмі спочатку задається розмір по першому вимірюванню (кількість стовпців): SetLength (A, 3); // Потім задається розмір другого виміру для кожного з трьох стовпців, наприклад: SetLength (A [0], 3); SetLength (A [1], 2); SetLength (A [2], 1);
Таким чином створюється трикутна матриця:
Звільнити пам'ять, зайняту масивом, можна використовуючи той же оператор SetLength, вказавши нульове кількість елементів, або за допомогою команди
Примітка. привласнення значення nilосвобождает пам'ять тільки у динамічних масивів Delphi. Для звичайних покажчиків звільнення пам'яті не проводиться, що може привести до так званої "витоку" пам'яті.
Відзначимо істотна відмінність в роботі з рядками і динамічними масивами, що мають однакове внутрішнє уявлення на основі покажчиків, але різні методи роботи. Дві різні рядки, що складаються з однакового набору символів, вважаються рівними, а два різних масиву, що містять однакові елементи, не рівні.