#include <iostream>
#include <conio.h>
int main()
{
setlocale(LC_ALL, "Russian");
const size_t SIZE = 3000000000ul;
char* ptr = NULL;
try
{
ptr = new char[SIZE];
std::cout << "Память используется без сбоев.\n";
}
catch (std::bad_alloc&)
{
std::cout << "Исключение bad_alloc: невозможно разместить данные в памяти.\n";
}
delete[] ptr;
getch();
return 0;
}
Столько кода — и столько ошибок! По пунктам.
1. Ответ на ваш вопрос. Сделать константу побольше. Кстати, эта константа — size_t. В 64-битном коде надо ещё больше.
2. Не проработано поведение delete[], если случится ошибка. Покатит инициализация NULL.
3. Если случится ошибка, будут выведены оба сообщения.
4. getch — функция из платформозависимого заголовка conio.h. Только DOS/Windows.
5. Обработку аварий обычно делают по ссылке.
6. Для первого параметра setlocale надо указывать ненулевую маску, на какие части ставить локаль. LC_ALL — везде. Что писать вторым параметром, зависит от библиотеки времени выполнения.