#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
==================
Ограничений на запись в невыделенный участок памяти нет.