Выделение памяти под нетипизированный указатель
Оператор new выделяет область памяти размером соответствующим заданному типу. Программист имеет возможность выделить область памяти заданного размера. Для этого используются функции семейства alloc.
#include <stdlib.h> or #include<alloc.h>
void *malloc(unsigned size);
Функция malloc() выделяет блок памяти размером size байт.
В случае успеха, malloc() возвращает указатель на выделенный блок памяти. Если недостаточно памяти для нового блока, это возвращается пустой указатель (NULL). Содержание блока остается неизменным. Если размер аргумента == 0, malloc() возвращает NULL.
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ char *str; /* allocate memory for string */ if ((str = (char *) malloc(10)) == NULL) { printf("Not enough memory to allocate buffer\n"); exit(1); /* terminate program if out of memory */ } /* copy "Hello" into string */ strcpy(str, "Hello"); /* display string */ printf("String is %s\n", str); /* free memory */ free(str); return 0;}Функция calloc()
#include <stdlib.h>
void *calloc(unsigned nitems, unsigned size);
выделяет блок памяти размером nitems*size. Блок инициализируется нулями. Возвращаемые значения аналогичны функции malloc().
#include <stdio.h>
#include <stdlib.h>#include <string.h>
int main(){
char *str = NULL;/* allocate memory for string */
str = (char *) calloc(10, sizeof(char)); /* copy "Hello" into string */strcpy(str, "Hello");
/* display string */
printf("String is %s\n", str);/* free memory */
free(str);
return 0;
}
Перевыделить память позволяет функция realloc().
void *realloc(void *block, unsigned size);
realloc пытается изменить размер предварительно выделенного блока. Если size — ноль, блок памяти освобожден, и возвращается NULL. Аргумент block указывает на память, предварительно полученный, вызовами malloc, calloc, или realloc. Если block==NULL, realloc работает точно так же как malloc.
realloc копирует содержимое старого блока памяти в новый.
realloc возвращает адрес нового блока памяти, который может отличаться от старого.
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char *str; /* allocate memory for string */ str = (char *) malloc(10); /* copy "Hello" into string */ strcpy(str, "Hello"); printf("String is %s\n Address is %p\n", str, str); str = (char *) realloc(str, 20); printf("String is %s\n New address is %p\n", str, str); /* free memory */ free(str); return 0;}Освобождение памяти, выделенной функциями calloc, malloc, или realloc осуществляется функцией free().
void free(void *block);Дата добавления: 2016-07-27; просмотров: 1726;