C 异常捕获问题
void mm(int i)
{
printf("mm_wrong\n");
siglongjmp(jmpbuf, 1);
};
int tt(int m ,int j)
{
return m/j;
}
int test (int m ,int j)
{
int tt2 = 0;
if (sigsetjmp(jmpbuf, 1))
{
printf("error\n");
goto E1;
}
struct sigaction sa, oldsa;
sigemptyset(&sa.sa_mask);
sigfillset(&sa.sa_mask);
sa.sa_handler = mm;
sigaction(SIGFPE, &sa, &oldsa);
for ( jj=0; jj<5; jj++)
{
// raise(SIGFPE); (这里如果用raise发出异常就没问题)
tt2 +=tt(m, j);
printf("J:%d\n",jj);
}
E1:
return tt2;
}
int main (int argc, char * const argv[]) {
int i ;
int m65;
for (i = 0; i< 5; i++)
{
printf("i=%d\n",i);
m65 = test(9, 0);
}
std::cout << "Hello, World!\n"<<m65<<"i:"<<i;
return 0;
}
问什么用Raise的话就没问题,而用9/0(SIGFPE)就只能捕获到一次异常,下一次i==1的时候系统就出错了。