Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

2.8.1.Операторы malloc и free.

Оператор mallocвыделяет необходимое число байт памяти под переменные, аfreeеё освобождает.

Формат:

имя_указателя=(тип_указателя)malloc(количество_выделенных байт)

Формат: free(имя_указателя);

Пример:

int*n; //объявление указателя

n=intmalloc(2); //выделение памяти

free(n); //освобождение памяти

Пример программы. Выделение памяти под строку символов.

#include<stdio.h>

#include<string.h>

#include<alloc/h>

void main(void)

{char*str;

str=(char*)malloc(10); //выделение памяти под строку символов

strpy(str,”Privet”); //присваивание значений

printf(“Строка это %s\n”,str);

free(str);

}

2.8.2.Операторы new и delete.

Формат:

переменная_указатель=new тип переменной (инициализированное значение);

delete переменная указатель;

Здесь переменная указатель является указателем типа тип переменной. Операторы newвыделяет память для хранения значения типа тип переменной и возвращает её адрес. С помощьюnewмогут быть размещены любые типы данных. Операторdeleteосвобождает память, на которую указывает переменная указатель. Если операция выделения памяти не может быть выполнена, то операторnewгенерирует исключение типаxalloc. Если программа не прехватит это исключение, то она будет снята с выполнения. Хотя для коротких программ такое поведение по умолчанию является удовлетворительным, для реальных прикладных программ обычно требуется перехватить исключение и обработать его соответствующим образом. Для того чтобы отделить это исключение необходимо включить заголовочный файл <except.h>

Пример.В данной программе блокtry/catchотслеживает ошибки выделения памяти.

#include<iostream.h>

#include<except.h>

int main()

{int *p;

try {

p=newint; // выделение памяти дляint

}catch(xallocxa)

{

cout<<”размещение невозможно\n”;

return1;

}

*p=20; // присваивает данному участку памяти значение 20

cout<<*p; //демонстрирует результаты путём вывода значений

deleteh; //освобождает память

return0;

}

Эта программа присваивает переменной р адрес блока памяти, имеющего достаточный размер для того, чтобы содержать число целого типа, далее этой памяти присваивается значение 20 и содержимое памяти выводится на экран. Динамически выделенная память освобождается.

Пример инициализации памяти с помощью указателя new.В данной программе память, на которую указфывает указатель р инициализирует значение 99.

#include<iostream.h>

#include<except.h>

int main()

{int *p;

try{

p=new int(99); // инициализация 99

}catch (xalloc x) {

cout<<”размещение невозможно\n”;

return1;

}

cout <<*p;

delete p;

return 0;

}

2.8.2.1.Размещение массивов с помощьюnew.

Формат переменная указатель= new тип_переменной[размер];

где размер опрелеляет число элементов массива.

Ограничения при размещении массива:

  • его нельзя инициализировать

  • для освобождения динамически размещённого массива необходимо использовать следующую форму оператора delete[] переменная указатель; квадратные скобки информируют операторdelete, что необходимо освободить память, выделенную для массива.

Пример.Выделяется память для массива из 10 элементов типаfloat. Элементам массива присваиваются значения от 100 до 109, а затем содержимое массива выводится на экран.

#include<iostream.h>

#include<escept.h>

int main()

{ float *p;

int i;

try{

p=newfloat[10]; // получение 10 элементов

}catch(xallocxa) {

cout<<”размещение невозможно\n”;

return1;

}

//присваивание значении от 100 до 109

for(i=0;i<10;i++)

p[i]=100.00+i;

delete []p; //удаление всего массива

return 0;

}