Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Дисциплины:
2023-01-02 | 16 |
5.00
из
|
Заказать работу |
• Динамически распределяемая область памяти – это свободная область памяти, не используемая программой, операционной системой или другими программами (англ. heap – «куча»).
• С++ включает набора средств, позволяющих организовать работу с динамически выделяемой памятью: унаследованный от С и реализованный в С++.
• В программе не следует смешивать использование средств разных языков.
Управление динамической памятью
• Основу системы динамического распределения памяти в С составляют библиотечные функции calloc (), malloc (), realloc () и free ().
• Для работы с динамической памятью в С++ используют специальные операторы new и delete.
• Перед попыткой использовать распределенную память важно проверить, что возвращаемое значение не равно нулю.
Функция calloc()
void *calloc(size_t num, size_t size);
size – параметр, определяющий размер выделяемой области;
num – количество областей.
• Функция calloc () выделяет память, размер которой равен значению выражения num * size.
• Выделенная область памяти обнуляется.
• Функция calloc () возвращает указатель на первый байт выделенной области или NULL, если запрос на память выполнить нельзя.
Функция calloc()
• Тип void может быть переопределен для требуемого типа, т. е. для char, int, float, double.
double *ptr;
ptr = (double *)
(calloc(10, sizeof(double)));
if (!ptr) // условие логического отрицания
{printf("Out of memory. Press any key:\n");
_getch(); exit(1);
}
Функция calloc()
int * list;
list = (int *) calloc(3,sizeof(int));
* list =-244;
*(list+1)=15;
*(list+2)=-45;
…
free(list);
Функция malloc()
void *malloc (size_t size);
size – параметр, определяющий размер выделяемой области.
• Функция malloc () возвращает указатель на первый байт области памяти размера size или NULL, если запрос на память выполнить нельзя.
• Выделенная область памяти не инициализируется.
Функция malloc()
int *a;
If
((a=(int *)malloc(sizeof(int)))==NULL)
{
printf("Память для числа не выделена.");
exit(1);
}
*a=-244;
*a+=10;
free(a);
Функция realloc()
void *realloc(void *ptr, size_t size);
* ptr - указатель,
size –размер выделяемой области.
• Функция realloc () изменяет размер блока ранее выделенной памяти. Значение параметра size может быть больше или меньше, чем перераспределяемая область.
• Возвращает указатель на блок памяти, т.к. бывает необходимо переместить этот блок.
• Если новый размер памяти больше старого, дополнительное пространство не инициализируется.
Функция realloc()
Int input,n;
int count=0;
int *numbers = NULL;
int *more_numbers;
do {
printf ("Enter an integer value
(0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*)
realloc(numbers,count * sizeof(int));
Функция realloc()
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input; }
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1); }
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++)
printf ("%d ",numbers[n]);
Функция free()
void free(void *ptr);
ptr – параметр, определяющий адрес освобождаемого блока памяти.
• Функция free () возвращает в динамически распределяемую область памяти блок, после чего эта память становится доступной для выделения в будущем.
• Вызов функции free () должен выполняться только с указателем, который был получен ранее в результате вызова одной из функций динамического распределения памяти.
Функция free()
#include <stdio.h>
#include <stdlib.h>
int main () {
int *buf1, *buf2, *buf3;
buf1 = (int*) malloc(100*sizeof(int));
buf2 = (int*) calloc(100,sizeof(int));
buf3=(int*)realloc(buf2,50*sizeof(int));
free (buf1);
free (buf3);
return 0;
}
Операторы new и delete
• Выделение памяти под одно значение:
<Типизированный указатель> =
new <Тип>[(<Значение>)];
<Тип> – тип значения, под размещение которого выделяется память – определяет размер памяти, выделяемый данным оператором;
<Значение> – инициализирующее значение.
• Освобождение памяти, выделенной под одно значение:
delete <Типизированный указатель>;
Операторы new и delete
• Выделение памяти под несколько значений:
< Указатель > = new< Тип >[< Количество >];
<Тип> – тип значения, под размещение которого выделяется память – определяет размер памяти, выделяемый данным оператором;
<Количество> – количество значений, которое необходимо разместить в памяти.
Операторы new и delete
• Освобождение памяти, выделенной под несколько значений.
delete[] <Типизированный указатель>;
Квадратные скобки присутствуют в операторе и указывают, что освобождается несколько значений, память под которые отводилась одним оператором new:
Операторы new и delete
int *k;
k = new int;
*k = 85;
delete k;
int *a;
if ((a = new int(-244))==NULL) {
printf("Память для числа не выделена.");
exit(1);
}
delete a;
Операторы new и delete
short *list;
list = new short[3];
*list=-244;
*(list+1)=15;
*(list+2)=-45;
delete[] list;
Операторы new и delete
int i,n; int *p;
cout << "How many numbers would you like to type? ";
cin >> i;
p = new int[i];
if (p == 0) cout << "Error: memory could not be allocated";
else {
for (n=0; n<i; n++) {
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<i; n++) cout << p[n] << ", ";
delete[] p;
}
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!