- #include
- #include
- #include
- #include
- using namespace std;
-
-
- // 实际上分配的是虚拟地址,地址够用就不会分配失败
- // 64位处理器可用地址是 2 48次方,因为不需要这么大的寻址控件,过大的控件只会导致资源浪费,就是256t
- void testNew()
- {
- try
- {
- int* ptr = new int[100000000000000000]; // 尝试分配一个非常大的int数组,直接被catch掉了
- printf(" 分配结果: %p \n", ptr);
- }
- catch (std::bad_alloc& ex)
- {
- std::cout << "分配内存失败: " << ex.what() << std::endl;
- }
- // int* ptr = new int[100000000000000000]; // 尝试分配一个非常大的int数组,直接报错"terminate called after throwing an instance of 'std::bad_alloc'"挂掉
- // printf(" 分配结果: %p \n", ptr);
-
- int* ptr = new (std::nothrow) int[100000000000000000]; // 尝试分配一个非常大的int数组,返回nullptr, 不会挂掉
- printf(" 分配结果: %p \n", ptr);
-
- // 需要c++20 支持
- // auto pa1 = std::make_shared
(5); - // auto pa2 = std::make_shared
(); //g++ -std=c++20 testTry.cpp 仍然不支持 -
- }
-
- int main()
- {
-
- // testNew();
- // return 0;
-
- string str = "http://c.linzeyu.net";
-
- try
- {
- // char ch1 = str[1000000000]; // 这里该挂的还是会挂, 因为不是at
- // cout << ch1 << endl;
- }
- catch (exception e)
- {
- cout << "[1]out of bound!" << endl;
- }
-
- try
- {
- // int a = 12;
- // int b = a / 0;
- char ch2 = str.at(1000000000); // at 会检查异常
- cout << ch2 << endl;
- }
- catch (exception& e)
- { //exception类位于
头文件中 - cout << "[2]out of bound!" << endl;
- }
- // char ch3 = str.at(100000000); // terminate called after throwing an instance of 'std::out_of_range' ,
- // 这里会抛异常, 但是没有try 去捕获,仍然挂
- return 0;
- }
c++ try cathch 其实就是if else goto