Управление памятью производится при помощи операторов new и delete, а так же функциями malloc и free (объявлены в stdlib.h).
- new используется для выделения памяти, в случае если выделение не произошло, возвращается нулевой указатель.
- delete служит для освобождения памяти. После освобождения памяти указателю необходимо присвоить значение 0, чтобы избежать дальнейших ошибок.
Как альтернативой можно воспользоваться С функциями как malloc и free. Эти функции нельзя смешивать с операторами динамической памяти, то есть нельзя выделить память оператором new и освободить ее функцией free или наоборот.
Пример кода с операторами new и delete: #include <iostream> using namespace std; int main() { // создание объекта типа int со значением 7 // и сохранение его адреса в указателе a int *a = new int (7); // освободили память на которую указывал a cout << *a << endl; delete a; // элементы массива нельзя инициализировать // им задается значение по умолчанию // в случае классов вызывается конструктор по умолчанию int *mas = new int [10]; for (int i = 0; i < 10; i++) cout << mas[i] << " "; cout << endl; delete [] mas; // при доступе к нулевому указателю // генерируется системная ошибка, // а значит ошибка не останется незамеченной mas = 0; return 0; } | Пример использования функции malloc и free: #include <stdafx.h> #include <stdlib.h> #include <iostream> using namespace std; int main() { int i, n; float *a; float s; cout << endl; //ввод размерности массива cin >> n; //выделение памяти под массив из n вещественных элементов a = (float *)malloc(n*sizeof(float)); cout << endl; //ввод элементов массива for (i = 0; i < n; i++) { cin >> *(a+i); } //накапливание суммы элементов массива for (s = 0, i = 0; i < n; i++) s += *(a+i); //вывод значения суммы cout << s << endl; //освобождение памяти free (a); return 0; } } |