g++不支持异常处理 ?

yangrunhua 2000-02-15 05:11:00
有如下:
try
{
char *buffer=new char[1000000000];
if (buffer==NULL)
throw "out of memory";
}
catch(char*string)
{
cout<<string<<endl;
}
运行时竟然结果不是输出out of memory而是Aborted(core dumped)
Why?
...全文
260 点赞 收藏 7
写回复
7 条回复
chenshuishui 2001年05月31日
同意jansenzhu(),直接试一下
try
{
throw "out of memory";
}
catch(char*string)
{
cout<<string<<endl;
}


回复 点赞
skt642 2001年05月31日
67017关注!
回复 点赞
茂奇软件 2000年02月20日
[1000000000];
perhaps the interage have overfollow.

you can try it directly.

try
{
throw "out of memory";
}
catch(bad_alloc e) //也可以catch(exception e),e.what()报的信息不同
{
cout<<e.what()<<endl;
}
catch(char*string)
{
cout<<string<<endl;
}


回复 点赞
netmare 2000年02月16日
我在linux下试了一下,sintony说的有理,是new时系统throw的异常.
回复 点赞
netmare 2000年02月16日
在linux下将程序改为
#include <exception> //注意是exception而不是exception.h
#include <new>

try
{
char *buffer=new char[1000000000];
if (buffer==NULL)
throw "out of memory";
}
catch(bad_alloc e) //也可以catch(exception e),e.what()报的信息不同
{
cout<<e.what()<<endl;
}
catch(char*string)
{
cout<<string<<endl;
}
回复 点赞
sintony 2000年02月15日
因为char *buffer=new char[1000000000];
本身就throw "Aborted(core dumped)"
你catch 的是系统的出错信息
回复 点赞
netmare 2000年02月15日
core dump可能发生在catch之后,因为cout是带缓冲的,所以未显示出来,用cerr试试.
从你的程序看,catch时除了显示错误信息后未作其他处理,若在catch之后又使用了buffer就会core dump了
回复 点赞
发动态
发帖子
系统维护与使用区
创建于2007-08-27

5679

社区成员

7.4w+

社区内容

系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区公告
暂无公告