我似乎无法在 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
由于某种原因,程序在测试异常处理时执行时退出。这是 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