try-catch Problem



  • Hi,

    Wieso will das hier nicht funktionieren:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    ...
    vector<float> fvect1;
    ...
    try
    {
      fvect1.resize(99999999999999999999999, 0);
    }
    catch(const bad_alloc& e_ba) 
    {
      cerr << "Nicht genugend Speicher vorhanden!" << endl;
      return(1);
    }
    

    --> Der catch-Block wird nicht ausgeführt. Stattdessen wird mein Programm einfach terminiert.

    lg



  • offensichtlich macht "resize" kein "if (blabla > max) throw ...;"



  • #include <vector>
    #include <iostream>
    #include <stdexcept>
    using namespace std;
    
    int main()
    {
        vector<float> fvect1;
    
        int x=99999999999999999999999;
        cout<<x<<endl;
    
        try
        {
            fvect1.resize(99999999999999999999999, 0);
        }
        catch(const bad_alloc& e_ba)
        {
            cerr << "Nicht genugend Speicher vorhanden!" << endl;
            return(1);
        }
        catch(const length_error& e_ba)
        {
            cerr << "Paßt gar nicht mehr in den Adressraum oder sowas." << endl;
            return(1);
        }
    }
    


  • Es sollte auf einem normalen System auch einen Überfluss geben, da "99999999999999999999999" normalerweise weder in einen int noch in einen std::size_t passt.


Anmelden zum Antworten