C++ 没有递归的堆栈溢出?

C++ 没有递归的堆栈溢出?,c++,lexer,C++,Lexer,就我所见,我的代码没有递归,但我得到了异常0xC00000FD。根据虚幻引擎的骑士,这是发生在主要功能。在反编译代码中遇到它 mov byte ptr [r11], 0x0 它工作正常,但当我再次运行它时,为了确保它工作正常,它突然坏了。现在,它每次都会给出这个例外。 这是我的密码: //Language.cpp #包括 #包括 #包括 #包括 #包括 #包括“Lexer/Lexer.h” #包括“Util/StrUtil.h” int main(int argc,char*argv[]) {

就我所见,我的代码没有递归,但我得到了异常0xC00000FD。根据虚幻引擎的骑士,这是发生在主要功能。在反编译代码中遇到它

mov byte ptr [r11], 0x0
它工作正常,但当我再次运行它时,为了确保它工作正常,它突然坏了。现在,它每次都会给出这个例外。 这是我的密码:

//Language.cpp
#包括
#包括
#包括
#包括
#包括
#包括“Lexer/Lexer.h”
#包括“Util/StrUtil.h”
int main(int argc,char*argv[])
{
std::字符串行,fileString;
std::ifstream文件;
打开(argv[1]);
if(file.is_open())
{
int行=0;
while(file.good())
{
如果(行数>10000)
{
标准:cerr
就我所见,我的代码没有递归

事实上,所示代码中没有递归。缺少递归并不意味着不会溢出堆栈

没有递归的堆栈溢出

是的,此程序可能会在某些系统上溢出堆栈

std::string
的典型大小为32字节(在不同语言实现之间可能有很大差异).10000字符串是312 kiB。大多数桌面系统上的执行堆栈是一对几个MiB。一个数组大约是内存的三分之一,必须在程序最深的堆栈帧中容纳所有自动变量。剩余堆栈内存不足以容纳程序的其余部分是非常可行的,特别是考虑到您拥有另一个巨大的
Line
对象数组


要修复程序,请不要在自动存储中分配像这样的大量变量。

std::string arr[10000];Line Line[10000]
--堆栈爆炸了。@PaulMcKenzie你是说它的内存不足了吗?@LysanderMealy除了堆栈的内存不足外,什么是堆栈溢出?@LysanderMealy我想是时候学习使用
std::vector
,顺便说一句,
(char)0x00
通常是写
'\0'
(char)10
是不寻常的;如果要插入换行符,请将其写成
'\n'
std::string arr[10000];