我似乎无法在 C++ 中捕捉到这个异常

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

由于某种原因,程序在测试异常处理时执行时退出。这是 class 即时消息用作异常收件人

#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

这是另一个class的函数成员,它产生了异常

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

测试主要 :

try
{
c2.Prelievo(20);

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

输出:


进程在 1.276 秒后退出,return 值为 3221225477 按任意键继续 。 . .

我尝试将 badalloc 对象定义为“const”,但没有用。有什么想法吗?

很简单,您正在复制到 badalloc class 中未初始化的指针 Message

你只要构造一个 badalloc 对象就会得到这个错误。这与异常无关。

编辑

这是一个可能的解决方案,使用 std::string 来避免指针问题。

#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