Проверка на выделение памяти

Существует единственное числовое значение, которое можно присвоить непосредственно указателю – это NULL. Нулевой адрес – особый, по этому адресу не может хранится ни одна переменная. То есть указатель, имеющий нулевое значение указывает в «никуда», к такому указателю нельзя применить оператор разыменования.

Библиотечные функции malloc (calloc) или оператор new используют функцию операционной системы для выделения памяти. Если затребованный размер памяти слишком большой (а также при попытке создать массив из нуля или отрицательного числа элементов), операционная система не будет выделять память и тогда функции или оператору вернет нулевое значение (NULL). Если это нулевое значение будет присвоено указателю, к которому впоследствии будет применен оператор разыменования или оператор обращения к элементу массива, то программа аварийно завершит работу с ошибкой «segmentation fault» (ошибка сегментации). Для того чтобы избежать таких ошибок необходимо сразу после выделения памяти проверить ее значение, которое возвращает функция или оператор. Проверку можно осуществить с помощью одного из условий: if (pi==NULL) или if (!pi). В случае если это значение равно NULL, выполнить какие-либо действия, например, вывести сообщение о невозможности выделения необходимого объема памяти.

Например:

int n=1000000000;

int *pi=new int[n];

if (pi==NULL) { // if (!pi)

printf (“Требуемая память не выделена!”);

return;

}

Все рассмотренные функции по работе с динамической памятью могут выделять память размером не более одного сегмента, то есть не более 64K в 16-ти разрядных моделях и не более 4G в 32-х разрядных моделях памяти.

 








Дата добавления: 2015-02-16; просмотров: 732;


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

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.