Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Оператор 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);




Дата публикования: 2015-01-13; Прочитано: 311 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...