N******K 发帖数: 10202 | 1 在vs debug下
try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉
是vs的问题 还是catch(...)的问题? |
m*******l 发帖数: 12782 | 2 换release看看
【在 N******K 的大作中提到】 : 在vs debug下 : try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉 : 是vs的问题 还是catch(...)的问题?
|
f*******t 发帖数: 7549 | |
N******K 发帖数: 10202 | 4 为什么?
java是不是可以?
【在 f*******t 的大作中提到】 : 不能
|
p***o 发帖数: 1252 | 5 Those are generated by the OS, e.g. SEH on Windows and signals on Linux.
【在 N******K 的大作中提到】 : 为什么? : java是不是可以?
|
t***t 发帖数: 6066 | 6 your java program also can't catch the exception/error which causes the jvm
to crash.
【在 N******K 的大作中提到】 : 为什么? : java是不是可以?
|
m*******l 发帖数: 12782 | 7 指针操纵这个绝对应该是可以catch的
【在 N******K 的大作中提到】 : 为什么? : java是不是可以?
|
b***i 发帖数: 3043 | 8 Exception不是给你处理编程错误的。指针非法操作是编程错误,最终会在发行版消失
的,或者变少。而exception是预计要发生的异常。Exception的目的是,在出问题的时
候,无法给出函数返回值的时候,提供一个另外的返回方式和返回值.
比如,计算开方。参数为负,算不出来开方,而函数的返回值是double,怎么办?扔出
一个Exception。这样被最近的catch接到,从而不走正常的返回通道。这种情况下,本
来正常通道就凑不通。这样简化了函数调用都要通过某个参数(指针所指向的结构)判
断一个任务是否完成。本来都要进行if, else if这样。改成try catch 就清晰了。方
便在你可以越级返回,即不在本次调用进行catch,而是在外层catch,比如一个类有很
多子类,就不用在每个子类实现的续函数中catch,而是在呼叫这些虚函数的那个函数
里面catch。
try{
p->virtualfun();
}catch(MyException e){
// no need to implement the catch in different virtualfuns, implement one
catch here
}
【在 N******K 的大作中提到】 : 在vs debug下 : try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉 : 是vs的问题 还是catch(...)的问题?
|
N******K 发帖数: 10202 | 9 在计算领域 除以0 给负数开方 都不是错
1/0=inf 0/0=nan
sqrt(-1)=i
【在 b***i 的大作中提到】 : Exception不是给你处理编程错误的。指针非法操作是编程错误,最终会在发行版消失 : 的,或者变少。而exception是预计要发生的异常。Exception的目的是,在出问题的时 : 候,无法给出函数返回值的时候,提供一个另外的返回方式和返回值. : 比如,计算开方。参数为负,算不出来开方,而函数的返回值是double,怎么办?扔出 : 一个Exception。这样被最近的catch接到,从而不走正常的返回通道。这种情况下,本 : 来正常通道就凑不通。这样简化了函数调用都要通过某个参数(指针所指向的结构)判 : 断一个任务是否完成。本来都要进行if, else if这样。改成try catch 就清晰了。方 : 便在你可以越级返回,即不在本次调用进行catch,而是在外层catch,比如一个类有很 : 多子类,就不用在每个子类实现的续函数中catch,而是在呼叫这些虚函数的那个函数 : 里面catch。
|
b***i 发帖数: 3043 | 10 数值计算就不需要try了,直接算不就行了
【在 N******K 的大作中提到】 : 在计算领域 除以0 给负数开方 都不是错 : 1/0=inf 0/0=nan : sqrt(-1)=i
|
|
|
c******y 发帖数: 29 | 11 请问如果用java怎么做到这个?1/0直接就exception了,假设一定要用primitive
types: int, double
【在 N******K 的大作中提到】 : 在计算领域 除以0 给负数开方 都不是错 : 1/0=inf 0/0=nan : sqrt(-1)=i
|
m*******l 发帖数: 12782 | 12 catch and deal with it by yourself ?
【在 c******y 的大作中提到】 : 请问如果用java怎么做到这个?1/0直接就exception了,假设一定要用primitive : types: int, double
|
t****t 发帖数: 6806 | 13 1.0/0==inf. 1/0 is div by 0 error.
【在 N******K 的大作中提到】 : 在计算领域 除以0 给负数开方 都不是错 : 1/0=inf 0/0=nan : sqrt(-1)=i
|
t****t 发帖数: 6806 | 14 not in c++. all catchable exception in c++ is generated by throw.
【在 m*******l 的大作中提到】 : catch and deal with it by yourself ?
|
N******K 发帖数: 10202 | 15 具体是这样
p=new object
delete p
try
{
p->somefunction()
}
catch(...)
{}
然后程序崩掉
【在 m*******l 的大作中提到】 : catch and deal with it by yourself ?
|
t****t 发帖数: 6806 | 16 told you, all c++ exception are generated by throw. if not, catch won't help.
【在 N******K 的大作中提到】 : 具体是这样 : p=new object : delete p : try : { : p->somefunction() : } : catch(...) : {} : 然后程序崩掉
|
l*********s 发帖数: 5409 | 17 not everything can be caught: segfault is a famous example. |
c*****z 发帖数: 171 | 18 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了. |
b***i 发帖数: 3043 | 19 和thrust讲的类似,其实java也是一样。Exception本质是让你自己写函数的时候主动
throw,让你自己呼叫这个函数的时候try, catch,实现另一种返回方式的。函数里面
,需要自己判断条件是否需要throw。只不过java的函数在1/0的时候主动throw了。
很多情况下,需求是在函数返回了好几层之外的地方来进行try catch。所以返回特殊
值来表示是不可行的。
【在 N******K 的大作中提到】 : 在计算领域 除以0 给负数开方 都不是错 : 1/0=inf 0/0=nan : sqrt(-1)=i
|
t****t 发帖数: 6806 | 20 I've never seen a c++ compiler that can catch GPF. show me an example?
【在 c*****z 的大作中提到】 : 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了.
|
|
|
x****u 发帖数: 44466 | 21 抓GPF又不是什么太空科技,直接抓Win32 SEH即可。这玩意在MSDN上有例子,剩下的就
是你愿不愿意包装的问题。
【在 t****t 的大作中提到】 : I've never seen a c++ compiler that can catch GPF. show me an example?
|
c******y 发帖数: 29 | 22 是可以,但是看起来不美观啊
【在 m*******l 的大作中提到】 : catch and deal with it by yourself ?
|
t****t 发帖数: 6806 | 23 that's still handled by yourself (i.e. "throw" by yourself), not compiler. i
am asking examples of compilers.
【在 x****u 的大作中提到】 : 抓GPF又不是什么太空科技,直接抓Win32 SEH即可。这玩意在MSDN上有例子,剩下的就 : 是你愿不愿意包装的问题。
|
x****u 发帖数: 44466 | 24 大错特错,自己handle SEH不是不可能,但非常麻烦几乎没有人做,需要用到线程本地
存储。实际上99%的Win32编译器都是在语法层面支持SEH的。
Windows下所有的C++编译器都支持SEH,只不过这个支持与OS相关,无法成为C++标准。
你问的是什么编译器抓得住GPF,答案是几乎全部的Windows编译器。
i
的就
【在 t****t 的大作中提到】 : that's still handled by yourself (i.e. "throw" by yourself), not compiler. i : am asking examples of compilers.
|
t****t 发帖数: 6806 | 25 that's handled by the library. in other words, it's still "throw" by c++ its
elf. there is no implicit throw.
【在 x****u 的大作中提到】 : 大错特错,自己handle SEH不是不可能,但非常麻烦几乎没有人做,需要用到线程本地 : 存储。实际上99%的Win32编译器都是在语法层面支持SEH的。 : Windows下所有的C++编译器都支持SEH,只不过这个支持与OS相关,无法成为C++标准。 : 你问的是什么编译器抓得住GPF,答案是几乎全部的Windows编译器。 : : i : 的就
|
x****u 发帖数: 44466 | 26 SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解
决C++抛不出跨模块的异常这个缺陷的。
its
【在 t****t 的大作中提到】 : that's handled by the library. in other words, it's still "throw" by c++ its : elf. there is no implicit throw.
|
t****t 发帖数: 6806 | 27 your SEH is still handled by library, calling your translator stub, and a na
tive C++ exception is thrown (by the stub), although this exception is async
hronous.
however i am not saying asynchronous exception vs synchronous exception. wha
t i am saying is, all catchable exception are generated by a throw statement
, here or there.
【在 x****u 的大作中提到】 : SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解 : 决C++抛不出跨模块的异常这个缺陷的。 : : its
|
n******t 发帖数: 4406 | 28 你又开始自说自话。。这习惯真的得改。
【在 x****u 的大作中提到】 : SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解 : 决C++抛不出跨模块的异常这个缺陷的。 : : its
|
b***i 发帖数: 3043 | 29 有道理
谈谈那个1/0在windows里面能catch吗?
na
async
wha
statement
【在 t****t 的大作中提到】 : your SEH is still handled by library, calling your translator stub, and a na : tive C++ exception is thrown (by the stub), although this exception is async : hronous. : however i am not saying asynchronous exception vs synchronous exception. wha : t i am saying is, all catchable exception are generated by a throw statement : , here or there.
|
x****u 发帖数: 44466 | 30 你不懂就不要扯淡,SEH就是编译器支持的语言级别C++异常。
是解
【在 n******t 的大作中提到】 : 你又开始自说自话。。这习惯真的得改。
|
|
|
b***i 发帖数: 3043 | 31 问题是抓它干吗?这种是编程错误,应该死掉,然后告诉哪里错了,程序员去改错。而
不是隐藏错误。
【在 c*****z 的大作中提到】 : 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了.
|
t*****n 发帖数: 4908 | 32 We do not use C++ exceptions.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#
所以书本和实战是不同的。
【在 N******K 的大作中提到】 : 在vs debug下 : try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉 : 是vs的问题 还是catch(...)的问题?
|
N******K 发帖数: 10202 | 33 学习c++ 就要掌握各种大坑 才能不掉进坑里
【在 t*****n 的大作中提到】 : We do not use C++ exceptions. : http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml# : 所以书本和实战是不同的。
|
x****u 发帖数: 44466 | 34 比如你想判断NULL指针又不打算写if。
【在 b***i 的大作中提到】 : 问题是抓它干吗?这种是编程错误,应该死掉,然后告诉哪里错了,程序员去改错。而 : 不是隐藏错误。
|
x****u 发帖数: 44466 | 35 不能跨模块的异常一点用也没有,比如使用数据库,内部错误就没法通过异常的方式返
回。
【在 t*****n 的大作中提到】 : We do not use C++ exceptions. : http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml# : 所以书本和实战是不同的。
|