Skip to content

Latest commit

 

History

History
55 lines (40 loc) · 2.46 KB

C. Allocation.md

File metadata and controls

55 lines (40 loc) · 2.46 KB

#c #alloc

Ссылки

  1. https://prog-cpp.ru/c-alloc/

Динамическое выделение памяти в Си

Для использования функций динамического выделения памяти необходимо описать указатель,представляющий собой начальный адрес хранения элементов массива.

Начальный адрес статического массива определяется компилятором в момент его объявления и не может быть изменен.

Функции динамического распределения памяти:

#include <malloc.h>

void* malloc(РазмерМассиваВБайтах);
void* calloc(ЧислоЭлементов, РазмерЭлементаВБайтах);

Память, динамически выделенная с использованием функций calloc(), malloc(), может быть освобождена с использованием функции

free(указатель);

malloc() выделяет блок памяти при передаче размера (в байтах) и возвращает указатель на начало блока. malloc() не инициализирует выделенную память. Если попытаться прочитать данные из выделенной памяти без инициализации, то могут быть прочитаны мусорные значения.

calloc() выделяет память и инициализирует каждый байт нулевым значением. См. также zalloc().

Простые примеры в c\allocation\test1\test1.c. Вывод:

$ ./test1
==================
test_malloc
0 0 0 0                     # выделили массив из 4-х элементов
0 0 0 0 0 0                 # смотрим, что в соседних ячейках, из интереса
3 0 0 5 0 7                 # установили в ячейки данные
0 0 -186347504 32767 0 7    # смотрим, что произошло после вызова free()
==================
==================
test_calloc
0 0 0 0
0 0 0 0 0 0
3 0 0 5 0 7
-186342736 32767 -186347504 32767 0 7
==================

Ограничений на запись в невыделенный участок памяти нет.