Динамическая память

Выделение и освобождение памяти

Последнее обновление: 08.01.2023
Упражнение 1

Напишите программу, которая выделяет память для одного объекта double, используя размер типа, и для одного объекта long, используя размер указателя. Поместите значения в выделенные участки памяти и выведите эти значения на консоль. После этого освободите выделенную память.

Ответ
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	// выделяем память для одного объекта double
 	double *p_double = malloc(sizeof(double));
 	if (p_double)
 	{
 		*p_double = 3.1415;
 		printf("*p_double = %f\n", *p_double);
 	}
 	free(p_double);

 	// выделяем память для одно объекта long
 	long *p_long = malloc(sizeof *p_long);
 	if (p_long)
 	{
 		*p_long = 32;
 		printf("*p_long: %ld\n", *p_long);
 	}
 	free(p_long);
}
Упражнение 2

Напишите программу, которая динамически выделяет память для массива из пяти чисел типа long. Используя цикл for, присвойте значения элементами массива и выведите их на консоль. После этого освободите память.

Ответ
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 	// выделяем память для пяти объектов long
	int n = 5;
 	long *p_long = malloc(5 * sizeof(long));
 	if (p_long)
 	{
 		for(int i = 0; i < n; i++)
		{
			p_long[i] = i + 1;
			printf("p_long[%d]: %ld\n",i, p_long[i]);
		}
 	}
 	free(p_long);
}
Упражнение 3

Напишите программу, которая динамически выделяет память для массива из трех чисел типа long. Используя цикл for, присвойте значения элементами массива и выведите их на консоль.

Затем с помощью функции realloc() увеличьте выделенную память до 5 элементов типа long. Установите значения для новых двух элементов long и выведите их на консоль. После этого освободите память.

Ответ
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 	// выделяем память для трех объектов long
	int m = 3;
 	long *ptr = malloc(m * sizeof(long));
 	if (ptr)
 	{
 		for(int i = 0; i < m; i++)
		{
			ptr[i] = i + 1;		// устанавливаем значения
			printf("ptr[%d]: %ld\n",i, ptr[i]);
		}
 	}
	// увеличиваем выделенную память до 5 объектов long
	int n = 5;
	long * ptr_new = realloc(ptr, n);
	if(ptr_new)
	{
		// устанавливаем и выводим значения для новых 2-х элементов
		for(int i = m; i < n; i++)
		{
			ptr_new[i] = i + 1;
			printf("ptr[%d]: %ld\n",i, ptr_new[i]);
		}
		free(ptr_new);
	}
	else
	{
 		free(ptr);
	}
}
Упражнение 4

Напишите программу, которая динамически выделяет память для массива. При этом длина массива неизвестна и вводится во время выполнения программы пользователем, и также значения всех элементов массива также вводятся пользователем.

Ответ
#include <stdio.h>
#include <stdlib.h>

int main(void)
{	
	int *block;	// указатель для блока памяти
	int n;		// число элементов массива
	// ввод числа элементов
	printf("Size of array=");
	scanf("%d", &n);
	
	// выделяем память для массива
	block = malloc(n * sizeof(int));
	
	// вводим числа в массив
	for(int i=0;i<n; i++)
	{
		printf("block[%d]=", i);
		scanf("%d", &block[i]);
	}
	printf("\n");
	
	// вывод введенных чисел на консоль
	for(int i=0;i<n; i++)
	{
		printf("%d \t", block[i]);
	}
	
	// освобождаем память
	free(block);
	return 0;
}
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850