Для работы с памятью в C используют библиотечные функции: free(), malloc(), calloc(), realloc().
free
Функция
используется для освобождения памяти, на которую указывает аргумент pointer. Сначала память выделяется для приложения, после завершения работы с памятью её надо вернуть, этим возвратом и занимается функция free.
_msize
Функция _msize возвращает размер область памяти, выделенной из кучи:
аргумент — указатель на блок памяти. Функция _msize возврашает размер памяти в байтах. size_t — это unsigned integer.
malloc
Функция malloc выделяет область памяти из «кучи» (т.е. свободной области памяти):
аргумент определяет количество байтов, которое надо выделить из памяти. Функция malloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу. Если свободной для выделения памяти меньше, чем затребовоно в size_t, то функция malloc вернет NULL.
Пример работы с функцией malloc:
здесь выделено место в памяти для массива, состоящего из двух элементов типа int. Если выделение памяти пошло успешно, то освобождаем эту область памяти с помощью функции free.
Получаем:
calloc
Функция calloc выделяет область памяти и размещает в ней массив, инициализированный нулями:
первый аргумент количество элементов, а второй — размер в байтах одного элемента. Произведение значений аргуменов и даст величину области памяти, запрошенной для выделения. Функция calloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу. Если свободной для выделения памяти меньше, чем затребовоно, то функция calloc вернет NULL.
Пример работы с функцией calloc:
в примере выделяется память для массива типа int, содержащего два элемента. Эти элементы инициализированны нулями. Если выделение памяти пошло успешно, то освобождаем эту область памяти с помощью функции free.
Получаем:
realloc
Функция realloc меняет размер предварительно выделенной области памяти:
первый аргумент — это указатель на область памяти, размер которой нужно изменить, второй аргумент определяет новый размер области памяти. Если этот размер равен нулю, а первый аргумент указывает на имеющуюся область памяти, то функция realloc вернет NULL, а исходный блок памяти, на который указывает первый аргумент, будет освобожден. Если свободной для выделения памяти меньше, чем затребовоно, то функция realloc вернет NULL, а исходный блок памяти, на который указывает первый аргумент, сохраниться и останется без изменений. Функция realloc возвращает void указатель на выделенную область памяти, его можно привести к нужному типу.
Пример работы с функцией realloc:
В примере с помомощью функции malloc выделяем область памяти, далее с помощью функции realloc увеличиваем эту память.
Получаем:
Вот такой результат.