class Test {
Test test;
};
error C2460: “Test::test”: 使用正在定义的“Test”
struct Test {
Test test;
};
这种定义不应该存在,即使语法不存在问题,运行的时候也会出现问题。如果创建变量的时候,一定会先构造test对象,但是构造test的对象的时候,有需要构造test.test对象,构造test.test的对象的时候,需要先构造test.test.test对象。
#include
using namespace std;
class Test {
Test* test;
public:
Test() {
cout << "Test" << endl;
test = new Test();
}
};
#include "Test.h"
int main() {
Test test;
return 0;
}
出现stack overflow异常。
打印异常:
#include "Test.h"
int main() {
try {
Test test;
}
catch (exception e) {
cout << e.what() << endl;
}
return 0;
}
EXCEPTION_STACK_OVERFLOW不是C++异常,只能用操作系统提供的结构化异常(Structured Exception Handling,SEH)措施来处理。
VC中捕捉StackOverflow异常_jiangfuqiang的专栏-CSDN博客程序中栈溢出通常会导致进程直接关闭。本文分析Windows中栈增长和溢出过程,并提供一种捕捉栈溢出的方法,作为调试程序的参考。栈大小 VC中,栈大小默认为1M,但可以在编译的时候或在创建线程的时候指定其他值。栈增长和溢出 栈底地址在线程生命期内是常量,栈顶地址保存在SP(ESP、RSP)寄存器。栈地址从高向低增长,因此栈增长,对应着SP寄存器减小。 1M空间只https://blog.csdn.net/jiangfuqiang/article/details/8426196
#include
#include"Test.h"
int main() {
__try {
// 导致栈溢出的操作
Test test;
}
__except ((GetExceptionCode() == EXCEPTION_STACK_OVERFLOW) ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
int reset = _resetstkoflw();
cout << "exception captured!" << endl;
}
}
也可以把SEH转换为std::exception,结合std::exception 和SEh
关于如何使用c++中的try/catch捕获SEH异常并处理_冰糖葫芦的夏天的博客-CSDN博客两者区别:C++异常与SEH区别可参考《Windows核心编程第五版》第25章 25.2节(727页)下面取自原文:注意:C++异常和SEH异常不是同一个东西!!!C++使用try,catch作为关键字进行捕获异常(C++标准自己定义的异常)SEH是Windows操作系统自身使用并提供的一种捕获系统异常的方式,使用__try、__except、__finally、__leave作为关键字进行捕获异常(windows系统定义的异常)无法使用C++异常处理捕获SEH异常,同样SEH异常也无法捕https://blog.csdn.net/shang_cm/article/details/111602984
开启/Eha选项
C++异常和SEH的结合_郁郁 -CSDN博客https://blog.csdn.net/chenyu2202863/article/details/3260345
C++与SEH异常处理_atceedsun的专栏-CSDN博客参考以下两篇微软的文章:https://blog.csdn.net/atceedsun/article/details/38349645?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242
如何把SEH类型的系统异常转化为C++类型的异常 _网络人生博客的技术博客_51CTO博客_seh如何把SEH类型的系统异常转化为C++类型的异常 ,在上一篇文章中,详细讨论了“SEH与C++异常模型的混合使用”,这一篇文章中,主人公阿愚仍将这一主题继续深入,那就是“如何把SEH类型的系统异常转化为C++类型的异常?”(其实,这本质上仍然属于SEH与C++异常模型的混合使用,也即C++异常模型来捕获SEH系统类型的异常)。为什么要把SEH类型的系统异常转https://blog.51cto.com/xinxin8/789916
结构化异常处理 (C/C++) | Microsoft Docshttps://docs.microsoft.com/zh-cn/previous-versions/swezty51(v=vs.120)



