Stack overflow when debugging but not in release(调试时堆栈溢出,但不在版本中)
问题描述
我获得了以下代码,用于解析文本文件并对单词和行进行索引:
我的代码运行得非常完美,速度也相当快,直到我给它一个巨大的文本文件。然后,我从Visual Studio收到堆栈溢出错误。当我切换到"Release"配置时,代码可以顺畅地运行。我的代码是否有问题,或者在运行"Debug"配置时是否存在某种限制?我是不是想在一个功能中做太多的事情?如果是,我如何分解它,使其在调试时不会崩溃?
编辑 根据请求,我实现了addWord;
和lineParser:
推荐答案
堆栈溢出表示堆栈空间已用完(可能很明显,但以防万一)。典型的原因是非终止或过度递归,或非常大的堆栈对象复制。有趣的是,在这种情况下,它可能是其中之一。
在发行版中,您的编译器很可能正在进行尾部调用优化,以防止过度递归导致堆栈溢出。
在发行版中,您的编译器也可能正在优化lineParser返回的向量副本。
因此您需要找出Debug中哪个条件溢出,我会从最有可能的罪魁祸首递归开始,尝试将字符串参数类型更改为引用,即。
这应该可以防止您在每次嵌套调用addWord时复制Word对象。
还可以考虑将std::cout<;<;"Recursing addWord"<;<;std::Endl;type语句添加到addWord,这样您就可以看到它的深度以及它是否正确终止。
这篇关于调试时堆栈溢出,但不在版本中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!