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

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

Оператор 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; просмотров: 819; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ


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

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

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

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