65,210
社区成员
发帖
与我相关
我的任务
分享
char a[4];
try{
cin>>a;
//throw runtime_error("over");
}catch(overflow_error err)
{
cout<<err.what();
}
catch(runtime_error err)
{
cout<<err.what();
}
超过4个字符,是引发了栈检测函数checkstack()而非楼主认为的异常!(至少vs2005就是如此)
#include <iostream>
using namespace std;
class CMyException
{
public:
CMyException()
{
m_nErrLn = 0;
m_strReason = "";
}
CMyException(string str, int nLine)
{
m_strReason = str;
m_nErrLn = nLine;
}
~CMyException()
{
;
}
public:
string m_strReason;
int m_nErrLn;
};
void main()
{
char a[4];
try
{
int* pPointer = NULL;
if(pPointer == NULL)
throw CMyException("Pointer is NULL", __LINE__);
*pPointer = -1;
}
catch(const CMyException& excpt)
{
cout<<excpt.m_strReason.c_str()<<endl;
cout<<excpt.m_nErrLn<<endl;
}
catch(...)
{
cout<<"UnKnown Error";
}
system("pause");
}
1 .既然大多数异常能进行的操作就只有what()输出,为什么要定义那么多异常类型?
有可能只捕获指定异常
2. 猜想第一个问题的答案,有这么多类型是不是因为每种只有在throw了他那种异常时,才能够catch到?
注意类型
3. 我写了一个出现异常的例子,但是不管我用什么异常类型去catch,都没有阻止在运行时中断,为什么呢?难道没有对应这种情况的异常吗?运行时候的提示框 是不是调用terminate的结果?
捕获不到就用catch(...)
char a[4];
try{
cin>>a;
throw runtime_error("over");
}catch(overflow_error err)
{
cout<<err.what();
}
catch(runtime_error err)
{
cout<<err.what();
}
d:\>a
123
over
d:\>a
454325432
over