Как правило, описывается указатель нужного типа, который затем связывается с областью памяти, выделенной оператором new или си-совместимыми функциями для управления ОП.
1. Описать указатель на будущий динамический объект:
int *a;
//Надёжнее int *a=NULL;
2. Оператором new или функциями malloc, calloc выделить оперативную память:
a = new int [10];
или
#include <malloc.h>
//stdlib.h, alloc.h в разных компиляторах
//...
a = (int *) malloc (sizeof(int)*10);
или
a = (int *) calloc (10,sizeof(int));
В последнем случае мы выделили 10 элементов по sizeof(int) байт и заполнили нулями '\0'.
Важно! Не смешивайте эти 2 способа в одном программном модуле или проекте! Предпочтительней new, кроме тех случаев, когда нужно обеспечить заполнение памяти нулевыми байтами.
3. Проверить, удалось ли выделить память - если нет, указатель равен константе NULL (в ряде компиляторов null, nullptr, 0):
if (a==NULL) {
//Обработка ошибка "Не удалось выделить память"
}
4. Работа с динамическим массивом или строкой ничем не отличается от случая, когда они статические.
5. Когда выделенная ОП больше не нужна, её нужно освободить:
delete a; //Если использовали new
free (a); //Пытается освободить ОП,
//если использовали malloc/calloc
Важно! Всегда старайтесь придерживаться принципа стека при распределении ОП. То есть, объект, занявший ОП последним, первым её освобождает
Пример. Динамическая матрица размером n*m.
const int n=5,m=4;
int **a = new (int *) [n];
for (int i=0; i<n; i++) a[i] = new int [m];
После этого можно работать с элементами матрицы a[i][j], например, присваивать им значения. Освободить память можно было бы так:
for (int i=n-1; i>-1; i--) delete a[i];
delete a;
Задачи к лабораторной 2
1. Написать собственную функцию работы со строкой, заданной указателем, сравнить со стандартной.
2. Написать собственную функцию для работы с одномерным динамическим массивом, заданным указателем.
3. Написать свои версии функций преобразования строки в число и числа в строку.






