如何捕捉这个异常

yyc520 2009-09-28 11:07:10

/*
程序中需要调用其他库类的API,
但如果其他库类调用了类似 other_api()这样的函数,
难道自己的程序就只能等着挂掉么?

请教如何捕获这个异常!十分感谢...
*/
#include <iostream>
#include <string>
#include <map>

using namespace std;

typedef map<int, string> its;
typedef its::iterator itsi;

#include <Windows.h>

void other_api();

int main(int argc, char* argv[])
{
//try // or __try
//{
// other_api();
//}
//catch (...) // or __except(EXCEPTION_EXECUTE_HANDLER)
//{
// cout << "catch here!" << endl;
//}

__try
{
other_api();
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
cout << "catch here!" << endl;
}

return 0;
}

void other_api()
{
its m;
m.clear();
itsi i = m.find(3);
cout << i->second << endl;
}

...全文
167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyc520 2009-09-28
  • 打赏
  • 举报
回复
╮(╯▽╰)╭,我其实也知道,基本是那别人的API没辙,
不知道C++能不能从about中恢复,^_^
liveforlov 2009-09-28
  • 打赏
  • 举报
回复
如果这个是别人写的,那你没有办法,这个函数明显有问题,find之后不判断是否为空就输出值,很容易core dump的
只好自己再写一个,包装这个函数,做catch,然后让别人只调用你的函数。
但是对core dump这种catch不住的
yyc520 2009-09-28
  • 打赏
  • 举报
回复
itsi i = m.find(3);
cout << i->second << endl;


C++好像对这种情况直接做了退出处理,
虽然没跟踪到它调用abort(),exit(-1)之类的代码,
但估计他这么做了,郁闷呀....

other_api是别人写的呀....
forster 2009-09-28
  • 打赏
  • 举报
回复
othe_api 不是他写的吧。
liveforlov 2009-09-28
  • 打赏
  • 举报
回复
直接在other_api()里面做catch
yyc520 2009-09-28
  • 打赏
  • 举报
回复
编码错误,确实是编码错误,但是异常就不能捕获么,
那除零,空指针,非法内存访问都能被捕获呀!

气愤的是C++标准库自己做了一些处理,而且还很高兴的给你终止了程序!
就不能给个异常么....
taodm 2009-09-28
  • 打赏
  • 举报
回复
你那个叫编码错误,不叫异常。编码错误是要debug掉的。
yyc520 2009-09-28
  • 打赏
  • 举报
回复
就是不行呀...
程序会自动退出,崩溃,服务端难道不能用C++的东东?
好像mysqlpp用了大量的c++ std类,
我完蛋了...我用了mysqlpp,大哥们我做的是服务器呀,
不能等着挂呀...⊙﹏⊙b汗
forster 2009-09-28
  • 打赏
  • 举报
回复
你这个不行?
taodm 2009-09-28
  • 打赏
  • 举报
回复
嗯,等着挂掉反而是最好的。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧