Выделение памяти под нетипизированный указатель


Оператор 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; просмотров: 1629;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.