За свою жизнь я не могу понять, почему не работает. Я пробовал разные заголовки. Также поменялись местами новые и заголовки памяти и все тот же вывод:
0x61ff50 6422400
How many numbers would you like to type: 1000000000
terminate called after throwing an instance of 'std::bad_array_new_length'
what(): std::bad_array_new_length
Есть идеи, что я делаю не так? Я ищу способ дать nothrow без сбоя программы и использовать произвольное значение для размера массива. Кажется, мне нужно использовать массив в пределах максимального размера, что обеспечит стабильность программы, и, следовательно, я не могу протестировать объект nothrow; оставив мне единственный вариант использования исключения.
#include <iostream>
#include <memory>
#include <new> // also either/or this
using namespace std ;
int main ()
{
int i, n ;
int *p ;
cout << p << " " << *p << endl ;
cout << "How many numbers would you like to type: " ;
cin >> i ;
p = new (nothrow) int[i] ;
if (!p)
{
cout << "Error: memory could not be allocated" ;
}
else
{
for (n = 0 ; n < i ; n ++)
{
cout << "Enter number: " ;
cin >> p[n] ;
}
cout << endl << p << endl << *p << endl ;
cout << "You have entered: " ;
for (n = 0 ; n < i ; n++ )
cout << p[n] << ", " ;
delete[] p ;
cout << endl << p << " " << *(p + 0) << endl ;
p = nullptr ;
cout << endl << p << endl ;
p = &i ;
cout << endl << p << " " << *p ;
}
cin.get() ;
return 0 ;
}