c++exceptionruntimebad-alloc

I cant' seem to catch this exception in C++


For some reason the program exits when executed while testing the handling of an exception. This is the class im using as the exception recipient

#ifndef _BADALLOC
#define _BADALLOC
#include <cstring>
using namespace std;
class badalloc{
private:
    char* Message;
    double Number;
    
public:
    explicit badalloc(char* M="Error",const int & N=0)  {strcpy(Message,M); Number=N;}
    char* what () const {return Message;}
};
#endif

this is the function member of another class that generates the exception

void ContoCorrente::Prelievo ( const double & P) throw ( badalloc )
{
if(P>0)
{ 
    throw (badalloc ("ERROR 111XX",P));
} ...

test main :

try
{
c2.Prelievo(20);

}
catch ( badalloc e)
{
    cout<<e.what()<<endl;
}

output:


Process exited after 1.276 seconds with return value 3221225477 Press any key to continue . . .

i tried defining the badalloc object to throw as "const" but to no use. any ideas?


Solution

  • Very simple, you are copying to an uninitialised pointer Message in your badalloc class.

    You'd get this error just by constructing a badalloc object. This has nothing to do with exceptions.

    EDIT

    Here's a possible solution, using std::string to avoid the pointer problems.

    #ifndef _BADALLOC
    #define _BADALLOC
    
    #include <string>
    
    class badalloc{
    private:
        std::string Message;
        double Number;
        
    public:
        explicit badalloc(const char* M="Error",const int & N=0) : Message(M), Number(N) {}
        const char* what () const {return Message.c_str();}
    };
    
    #endif