显而易见的函数调用中未处理的异常

时间:2017-12-06 16:34:30

标签: c++ visual-studio vector

我有一个函数读取文本文件并成功返回文件中少量行的向量。我将这个向量传递给一个函数来处理这些行并且它引发了一个错误

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之间是否有一些神奇的数字?

1 个答案:

答案 0 :(得分:1)

你的筹码空间不足。

发生故障的功能不是责备的功能,这就是为什么它不会发生在您的小型测试程序中。

失败代码的调用路径中的一个函数非常贪婪,并且没有为它调用的函数留下足够的堆栈。

查找堆栈上的大对象以及过深的递归。