C++ 将值推入堆栈时出现Seg错误

C++ 将值推入堆栈时出现Seg错误,c++,stack,C++,Stack,我正在尝试使用文件内容作为输入和单独的操作数、括号和运算符。由于输入文件包含两行输入,我想我应该一次读取整行而不是一个值,因为我不想混淆这两行的值。我想做的是 使用getline并将一行存储到名为input的字符串变量中 将字符串(使用空格作为分隔符)分解为段,并将它们放入名为tempContainer的堆栈中 将tempContainer.top()存储到临时变量中,并调用tempContainer.pop() 处理temp以将括号和操作数分开,并将它们存储到两个不同的变量中 在我尝试将最后一

我正在尝试使用文件内容作为输入和单独的操作数、括号和运算符。由于输入文件包含两行输入,我想我应该一次读取整行而不是一个值,因为我不想混淆这两行的值。我想做的是

  • 使用getline并将一行存储到名为input的字符串变量中
  • 将字符串(使用空格作为分隔符)分解为段,并将它们放入名为tempContainer的堆栈中
  • 将tempContainer.top()存储到临时变量中,并调用tempContainer.pop()
  • 处理temp以将括号和操作数分开,并将它们存储到两个不同的变量中
  • 在我尝试将最后一个数据放入堆栈之前,一切都进行得很顺利。在调用tempContainer.push(temp)之前,我检查了这些值;一切都很好,所以我不明白为什么会出现分割错误。错误发生在运行时,而不是编译期间

    产出:

    A + B * (C - D * E) / F    <-----The original line to break down. Line 1
    A
    +
    B
    *
    (C
    -
    D
    *
    E)
    /
    F
    AB * CDE + (RST - UV / XX) * 3 - X5  <-----Line 2
    AB
    *
    CDE
    +
    (RST
    -
    UV
    /
    XX)
    *
    3
    -
    //Segmentation fault here
    

    A+B*(C-D*E)/F你需要像这样的边界检查:

    while(i < input.length() && input[i] != ' ')
    {
       substr2++;
       i++;
    }
    
    while(i
    您需要像这样的边界检查:

    while(i < input.length() && input[i] != ' ')
    {
       substr2++;
       i++;
    }
    
    while(i
    缺少这么多代码,很难帮助您调试。例如,变量声明将是有用的。@GWW我害怕发布太多的东西,因为之前有人建议我直截了当地说。我会马上解决这个问题。您是否尝试过使用调试器单步执行代码,并检查
    I
    的值与字符串长度的比较?您在
    for
    循环之外迭代了
    i
    很多次,但没有执行任何边界检查。@GWW我不这么认为。我假设,如果我可以确保使用cout语句正确地分隔字符串,那就好了。我删除了cout,很难用这么多缺少的代码来帮助您调试它。例如,变量声明将是有用的。@GWW我害怕发布太多的东西,因为之前有人建议我直截了当地说。我会马上解决这个问题。您是否尝试过使用调试器单步执行代码,并检查
    I
    的值与字符串长度的比较?您在
    for
    循环之外迭代了
    i
    很多次,但没有执行任何边界检查。@GWW我不这么认为。我假设,如果我可以确保使用cout语句正确地分隔字符串,那就好了。我卸下了箱子谢谢!这正是我需要的!老实说,如果你在这里,我会主动提出给你买自助餐厅菜单上的所有东西作为午餐:D从我这里为你自己买点东西:)谢谢!这正是我需要的!老实说,如果你在这里,我会给你买自助餐厅菜单上的所有东西作为午餐:从我这里为你自己买点东西:)