Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИСПОЛЬЗОВАНИЕ СВОБОДНОЙ ПАМЯТИ В С.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
91.65 Кб
Скачать

Что вам необходимо знать

По мере того как ваши программы становятся более сложными, вы будете выделять память в процессе выполнения, используя оператор new. Из этого урока вы узнали, как изменить поведение оператора new, сначала определяя функцию-обработчик, которую вызывает ваша программа, если new не может удовлетворить запрос на память, а затем с помощью перегрузки самого оператора new. Из урока 3 вы узнаете новые способы использования входного потока cm и выходного потока соut для усовершенствования возможностей ввода и вывода ваших программ. Прежде чем перейти к уроку 3, убедитесь, что вы изучили следующее:

    1. Если оператор new не может удовлетворить запрос на память, то по умолчанию он присваивает значение NULL соответствующему указателю.

    2. Если вашим программам необходима другая обработка в том случае, когда new не может удовлетворить запрос на память, ваши программы могут определить свои собственные обработчики. Используя функцию set_new_handler, программа может заставить new вызвать вашу функцию, если невозможно удовлетворить запрос на память.

    3. C++ позволяет вашим программам перегружать операторы newи delete. Однако, прежде чем это сделать, вы должны иметь четкое представление о свободной памяти (куче) и функциях библиотеки этапа выполнения, которые ею манипулируют.

Упражнение 1

Объясните разницу между четырьмя объектами:

(a) int ival = 1024;

(b) int *pi = &ival;

(c) int *pi2 = new int(1024);

(d) int *pi3 = new int[1024];

Упражнение 2

Что делает следующий фрагмент кода? В чем состоит логическая ошибка? (Отметим, что операция взятия индекса ([]) правильно применена к указателю pia. Объяснение этому факту можно найти в разделе 3.9.2.)

int *pi = new int(10);

int *pia = new int[10];

while ( *pi < 10 ) { pia[*pi] = *pi;

*pi = *pi + 1; }

delete pi;

delete[] pia;