Динамический массив в C
Динамический массив в языке программирования C
Динамический массив в языке программирования C – это механизм, позволяющий создавать массив переменной длины во время выполнения программы. Он отличается от статического массива, задаваемого заранее, тем, что его размер может быть изменен во время выполнения программы.
Для работы с динамическими массивами в C используется функционал динамического распределения памяти, предоставляемый стандартной библиотекой языка. Для работы с динамическими массивами необходимо знать несколько важных функций.
Функция malloc()
Функция malloc() – это функция выделения памяти. Она предоставляет возможность выделения определенного количества байтов памяти. Прототип функции выглядит следующим образом:
void* malloc(size_t size);
Функция malloc() принимает один аргумент – количество байтов памяти для выделения, и возвращает указатель на начало выделенной области памяти. В случае ошибки выделения памяти, функция возвращает NULL.
Пример использования функции malloc() для создания динамического массива:
#include <stdio.h>
#include <stdlib.h>
int main() {
int size = 5; // Размер динамического массива
int* arr = (int*) malloc(size * sizeof(int)); // Выделение памяти
if (arr == NULL) {
printf("Ошибка выделения памяти\n");
return 0;
}
// Заполнение динамического массива
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// Вывод элементов динамического массива
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr); // Освобождение памяти
return 0;
}
В данном примере, мы создаем динамический массив arr с помощью функции malloc(). Для задания размера массива, мы умножаем требуемое количество элементов (size) на размер одного элемента (sizeof(int)). Затем, мы заполняем массив значениями от 1 до 5, и выводим его элементы. Наконец, мы освобождаем выделенную память с помощью функции free().
Функция realloc()
Функция realloc() – это функция изменения размера динамического массива. Она позволяет изменить размер выделенной области памяти, сохраняя содержимое уже существующих элементов. Прототип функции выглядит следующим образом:
void* realloc(void* ptr, size_t size);
Функция realloc() принимает два аргумента – указатель на существующий динамический массив и новый размер требуемого массива, и возвращает указатель на начало измененной области памяти. В случае ошибки изменения размера массива, функция возвращает NULL.
Пример использования функции realloc() для изменения размера динамического массива:
#include <stdio.h>
#include <stdlib.h>
int main() {
int size = 5; // Размер динамического массива
int* arr = (int*) malloc(size * sizeof(int)); // Выделение памяти
if (arr == NULL) {
printf("Ошибка выделения памяти\n");
return 0;
}
// Заполнение динамического массива
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// Вывод элементов динамического массива
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int newSize = 10; // Новый размер динамического массива
int* newArr = (int*) realloc(arr, newSize * sizeof(int)); // Изменение размера массива
if (newArr == NULL) {
printf("Ошибка изменения размера массива\n");
free(arr); // Освобождение памяти
return 0;
}
arr = newArr; // Назначение измененного массива обратно переменной arr
// Заполнение нового размера динамического массива
for (int i = size; i < newSize; i++) {
arr[i] = i + 1;
}
// Вывод элементов нового размера динамического массива
for (int i = 0; i < newSize; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr); // Освобождение памяти
return 0;
}
В данном примере, мы сначала выделяем память под массив arr размером 5 элементов. Затем, мы заполняем массив значениями от 1 до 5 и выводим его элементы. Далее, мы изменяем размер массива с помощью функции realloc(), задавая новый размер (newSize) и сохраняя указатель на новую область памяти в newArr. Если изменение размера прошло успешно, мы продолжаем заполнять массив новыми значениями от 6 до 10 и выводим все элементы. Наконец, мы освобождаем память, затраченную на массив, с помощью функции free().
Важно помнить, что после каждого использования динамического массива необходимо освободить выделенную под него память с помощью функции free(), чтобы избежать утечек памяти.
Таким образом, динамический массив в языке программирования C предоставляет возможность гибкого распределения памяти под массивы переменной длины во время выполнения программы. Использование функций malloc() и realloc() позволяет выделить и изменить размер динамического массива, а функция free() – освободить память, которая была выделена под него. При работе с динамическими массивами важно следить за использованием памяти и не забывать об освобождении памяти после окончания работы с массивом.