我有一个函数读取文本文件并成功返回文件中少量行的向量。我将这个向量传递给一个函数来处理这些行并且它引发了一个错误
Unhandled exception at 0x00267EF9 in Bridge.exe: 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x00A82000). occurred
所以,正如Ben Voigt指出的那样,堆栈溢出可能与显然抛出它的函数无关,即
int LinesToCards(std::vector<std::string>& lines) {
int retval = -999;
return retval;
}
这是从main调用的,它有第三方DLL所需的行
int main()
{
std::string cards[MAXDEALS][DDS_HANDS][DDS_SUITS] ;
int retval = -999;
retval = LinesToCards(lines);
return 0;
}
在 #define DDS_HANDS 4 #define DDS_SUITS 4 不能改变,但原来的工作
#define MAXDEALS 999
现在抛出异常。如果我把它减少到
#define MAXDEALS 890
代码再次运行。如果我这样做
#define MAXDEALS 891
它崩溃了。在16240和16256之间是否有一些神奇的数字?
答案 0 :(得分:1)
你的筹码空间不足。
发生故障的功能不是责备的功能,这就是为什么它不会发生在您的小型测试程序中。
失败代码的调用路径中的一个函数非常贪婪,并且没有为它调用的函数留下足够的堆栈。
查找堆栈上的大对象以及过深的递归。