C++ 堆栈溢出vs segfault

C++ 堆栈溢出vs segfault,c++,gdb,segmentation-fault,stack-overflow,C++,Gdb,Segmentation Fault,Stack Overflow,我有一个非常奇怪的错误,我今天终于解决了。问题似乎是我在堆栈上分配了一个非常大的数组,这导致了问题 我的问题是,堆栈溢出时是否总是收到SEGV信号?是否有任何特殊信号可以提醒堆栈溢出问题 我将g++与gdb一起使用。Unix信号意义上的“信号”显然是SEGV.)如果你指的是信号,比如使用一个诊断工具,当有不好的事情发生时会告诉你,你可以试试valgrind,但实际上,你的系统只是告诉你了。在编译时知道堆栈是否会溢出是不可能的,部分原因是堆栈大小限制是一个运行时参数,此外,我想如果您事先知道它会是

我有一个非常奇怪的错误,我今天终于解决了。问题似乎是我在堆栈上分配了一个非常大的数组,这导致了问题

我的问题是,堆栈溢出时是否总是收到SEGV信号?是否有任何特殊信号可以提醒堆栈溢出问题


我将g++与gdb一起使用。

Unix信号意义上的“信号”显然是SEGV.)如果你指的是信号,比如使用一个诊断工具,当有不好的事情发生时会告诉你,你可以试试valgrind,但实际上,你的系统只是告诉你了。在编译时知道堆栈是否会溢出是不可能的,部分原因是堆栈大小限制是一个运行时参数,此外,我想如果您事先知道它会是什么,您仍然会遇到诸如停止问题之类的问题。

我明白了。问题是,这只发生在非常大的问题规模上,这几乎不可能用valgrind来处理。在较小的问题规模下,valgrind什么也没告诉我,代码运行得很好!GDB还产生了一条断层带,指示一条与之无关的线路。。。我希望gdb能够捕获堆栈溢出并产生一个更有意义的错误!实际上,对于
gcc
,保守地使用
-Wframe大于=len
标志是可能的。请参阅@daviditarenco:OP可以更好地告诉我们,但我不确定该选项在这种情况下是否有帮助,因为在满足某些运行时条件时,似乎会出现问题,例如,大数据量可能会导致大堆栈深度或以“alloca”样式分配大数组。