Операция new, при отказе возвращающая 0 ( VS2008 не работает )

Рис. 16.5 демонстрирует версию new, которая при неудавшемся выделении

требуемого объема памяти возвращает 0. Оператор for в строках 13-24 должен

выполнить 50 проходов, выделяя на каждом проходе массив из 50 000 000

значений типа double (т.е. 400 000 000 байт, поскольку double обычно занимает 8

байт). Оператор if в строке 17 проверяет результат каждой из операций new,

определяя, была ли память успешно выделена. Если new терпит неудачу и

возвращает 0, строка 19 печатает сообщение об ошибке и цикл завершается. [За

мечание. Для запуска этого примера мы воспользовались компилятором

Microsoft Visual C++ 6.0, поскольку Microsoft Visual Studio.NET при отказе

new не возвращает 0, а выбрасывает исключение bad_alloc]

// Рис. 16.5: TEST5.cpp

// Демонстрация до-стандартной new, возвращающей 0, если память

//не выделена.

#include <iostream>

using std::cerr;

using std::cout;

int main()

{

double *ptr[ 50 ];

// выделить память для ptr

for (int i = 0; i < 50; i++)

{

ptr[ i ] = new double[ 50000000 ];

if (ptr[ i ] == 0) // если new не удается выделить память

{

cerr << "Memory allocation failed for ptr[ " << i << " ]\n";

break;

} // конец if

else// успешное выделение памяти

cout << "Allocated 50000000 doubles in ptr[ " << i << " ]\n";

} // конец for

return 0;

} // конец main

/*

Allocated 50000000 doubles in ptr[ 0 ]

Allocated 50000000 doubles in ptr[ 1 ]

Memory allocation failed for ptr[ 2 ] // в VS2008 так не будет

*/


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: