c++中的异常处理从来没有捕捉到基本类型的异常,总是导致分段错误
exception handling in C++ never catches baisc type of exception, always result in segmentation fault
我擅长C语言,并且知道c++和c++的基础知识来执行我的代码。我正在尝试在c++中捕获异常。我在try部分的代码大部分是C代码。我写:
try{
....
}
catch (std::exception& e)
{
std::cerr << "exception caught: " << e.what() << 'n';
}
在try部分,我尝试了几个错误的代码:
char str[3];
free(str); // Memory Violation
这给了我分割错误和程序终止
while(1); // stack overflow
this持续运行了很长时间。我做了^c来中止它
int x = 5/0; // divide by 0 exception
这给了我一些随机的或零的值。
int arr[5];
cout<<arr[100] // array out of bound
这给了我一些垃圾值cout<& lt;Arr[1000]//内存违规
这导致了segfault
我不想使用,throw语句。我想保护我的代码,以防我抛出任何随机值错误,我的程序应该捕获它,打印它,然后继续下一项。
我在网上读了很多书。我知道c++不处理分段错误作为一个例外。
我的大部分代码将在c。在某些情况下,我将使用std: vector/std: string我不想使用throw,
这里我有几个问题:
1)不使用throw语句或异常函数,c++不能抛出异常。2)测试我的代码,我正在寻找的例子,导致,堆栈溢出,数组脱离bond,除零或任何类型的异常。谁能举几个例子?
3)在c++中try catch只适用于特定于STD的异常处理吗?
后来我也尝试使用set_terminate和set_unexpected:
使用以下代码:
typedef void (*pfv)();
void my_terminate()
{ cout << "Call to my terminate" << endl; }
void my_unexpected()
{ cout << "Call to my unexpected" << endl; }
int Divisor()
{
int result;
result = number%num;
if (result == 0 && num < 21)
{
num+1;
Divisor();
if (num == 20 && result == 0)
{
return number;
}
}
else if (result != 0)
{
number++;
Divisor();
}
}
int main ()
{
pfv old_term = set_terminate(my_terminate);
pfv old_unex = set_unexpected(my_unexpected);
Divisor();
}
这应该通过set_terminate
向my_unexpected调用输出结果但是我有分段错误。
我用g++来运行我的程序,所有我得到的是分割错误作为异常情况下的结果。
似乎我错过了一些基本的和重要的例外。需要一些输入
-
。实际上,您可以在大多数编译器中关闭抛出支持。与C语言的互操作性是您可能想要这样做的原因之一;C不支持throw
-
与Java或c#不同,没有检测这些条件的中间代码解释器,因此它们不会在发生异常时抛出异常。C和c++更接近硬件;在处理器级别,没有"throw"构造,也没有堆栈展开。
-
。在c++中,你可以抛出任何东西;整数、指针、引用、对象……你说吧。您不必扩展std::exception。当您大量使用可能抛出std::exception的标准库时,捕获std::exception是有用的,但如果您不想使用它,则没有理由必须使用它。
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 打开CV异常错误,尽管我的代码是正确的
- 异常错误C++ //Visual Studio
- 提升序列化异常错误
- 返回内存异常错误的矢量
- 使用用户定义的函数查找完美数时出现浮点异常错误
- cv::内存位置出现异常错误
- OpenCV未经处理的异常错误
- 分数简化算法,浮点异常错误
- 为什么我会收到浮点异常错误
- 文本框为空时,C++Windows窗体应用程序出现未处理的异常错误
- 文本框为空时C++ Windows 窗体应用程序未处理的异常错误
- 函数传递映射时出现异常错误
- 在MS Visual Studio 2010上使用带有Cuda互操作的OpenGL缓冲区时出现异常错误
- 未处理的异常错误
- C++:关闭控制台应用后出现异常错误
- 写入对象时运行时引发异常错误
- C++ C# 包装器空异常错误
- Coin3D(Open Inventor)中出现未处理的异常错误
- Stack Pop()函数出现未处理的异常错误