会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Thinking in code
Never know till try
南宁格力空调维修
杭州博世洗衣机维修
杭州万家乐热水器维修
杭州林内热水器维修
杭州西门子燃气灶维修
杭州樱花燃气灶维修
杭州三星冰箱维修
杭州西门子冰箱维修
杭州小天鹅洗衣机维修
杭州松下洗衣机维修
杭州海信空调维修
杭州三菱空调维修
杭州日立空调维修
杭州大金空调维修
杭州百乐满热水器维修
杭州博世壁挂炉维修
杭州威能壁挂炉维修
杭州菲斯曼壁挂炉维修
夜场招聘网
博客园
首页
新随笔
联系
订阅
管理
C语言的异常机制--setjump()和longjump()实现
/* ------------------------------------------------------------------------- ** File : cexcept.c * ** Coder: Spark Song. * ** Note : Use the example code from 《C Interfaces and Implementations》 * ** ------------------------------------------------------------------------- */ #include <setjmp.h> #include <stdlib.h> #include <stdio.h> #include <assert.h> int Allocation_handled = 0; jmp_buf Allocate_Failed; void *allocate(unsigned n) { void * new = (void *)malloc(n); if (new) return new; if (Allocation_handled) /* 如果实例化了异常处理程序的话... */ longjmp(Allocate_Failed, 1); /* 产生异常,并抛出 */ assert(0); /* 如果没有实例化异常处理程序,则此断言会报出运行期的错误 */ } int main(int argc, char *argv[]) { char *buf = 0; int count = 0; Allocation_handled = 1; /* 设置实例化异常的标志,设为1表示实例化了异常处理程序 */ if (setjmp(Allocate_Failed)) /* 实例化异常 */ { fprintf(stderr, "EXCEPT: Couldn't allocate the buffer/n"); exit(EXIT_FAILURE); } while(1) /* 测试代码:一直分配内存,直到没有内存为止。没有内存时会触发异常 */ { buf = (char *)allocate(4096000); printf("Allocate successs, the count is: %d/n", count++); } Allocation_handled = 0; return 0;
posted @
2011-03-27 21:54
Livesss
阅读(
2364
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告