2. Динамічні масиви в С++. Функції calloc, malloc, realloc і free та операції new і
delete
Кроме функции для выделения памяти в Си есть функция Ее особенностью malloc calloc. является
обнуление всех выделенных элементов Обращение к функции имеет вид . : void *calloc (num, size);
Функция выделяет элементов по байт и возвращает указатель на выделенный calloc num size участок
или при невозможности выделить память NULL .
Функция изменяет размер выделенной ранее памяти обращение к ней имеет вид realloc , : char
*realloc(void *p, size); Функция изменяет размер участка памяти на который указывает новый размер
участка , p, памяти Если при этом пришлось изменять месторасположение участка памяти то новое
size. , его месторасположение и возвращается в качестве результата Если в качестве передается . p
NULL, realloc malloc. то функция работает аналогично функции
Для освобождения выделенной памяти используется функция Обращение к ней имеет free. вид void
free( void *p); Освобождает память выделенную память указатель на участок память ранее , , p ,
выделенный функциями или calloc, malloc realloc.
Для выделения памяти в С есть еще операция ++ new. Ниже приведено решение задачи поиска суммы
элементов динамического массива вещественных чисел с помощью операции new.
Освобождение выделенного с помощью new участка памяти осуществляется с помощью
оператора delete следующей структуры:
delete [ ] p;
int main()
{
setlocale(LC_ALL, "");
double F1, F2, x, dx, a = 2, b = 9;
int i = 0, n = 14;
dx = fabs(b - a) / (n - 1);
x = a;
printf_s(" __________________________________\n");
printf_s(" | I| X | F1 | F2 | \n");
printf_s(" | | | | |\n");
while (i <= n)
{
++i;
F1 = sqrt(exp(x) + 1);
F2 = x * pow(log(x + 1), 2);
printf_s(" |%2d| %8.2f |%8.2f| %8.2f|\n", i, x, F1, F2);
;
}
printf_s(" __________________________________\n");
return 0;
int main()
{
const int n = 24;
int k = 0;
int arr[n] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,22,24 };
for (int i = n - 1; i >= 0; i -= 6)
{
for (int j = 0; j < 6 && k < n; j++, k++)
cout << arr[i - j] << " ";
cout << endl;
}
system("pause");
return 0;
}