繁体   English   中英

C++ 一个无效参数被传递给一个认为无效参数致命的 function

[英]C++ An invalid parameter was passed to a function that considers invalid parameters fatal

因此,我正在尝试编写一个程序,该程序最终将创建一个二维数组,该数组将包含用户输入字符串中数学运算符的位置。 因此,例如,如果用户输入 2+5-3,我希望我的数组类似于 {{+,1}{-,3}}。 我打算只使用 integer 数组和从 +,-,/,*,^ 到 1,2,3,4,5 的已知翻译。 但是,当我尝试测试它说“字符串下标超出范围”时,我不断抛出异常,然后我的 IDE 在我的 if 语句上放置一个错误代码,内容为“无效参数已传递给认为无效参数致命的 function ”。 我搞砸的任何想法?

#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <climits>

using namespace std;


int main()
{
equationstart:
    string eq;
    int posOp[50][2];
    int i;
    int i2 = 0;
    int i3;

    getline(cin, eq);
    for (i = 0; i <= 49; i++) {
        if (eq[i] == '+') {
            posOp[i2][0] = 1;
            posOp[i2][1] = i;
            i2++;
        }
    }

    for (i = 0; i <= 49; i++) {
        for (i3 = 0; i3 <= 1; i3++) {
            cout << posOp[i][i3];
        }
        cout << endl;
    }

    cout << endl;
    goto equationstart;

}

现在我想做的就是填充数组,然后将获取的数组显示到屏幕上,这样我就可以看到它正在工作。

a) 请不要使用 C arrays posOp[50][2] 改用 std::vector 。 如果您使用 posOp.at(idx),它会进行范围检查。 std::vector 是 C++ 最基本和最重要的特性之一。

b)正如@drescherjm 在上面的评论中指出的那样,当 eq.size() 小于 50 时, eq[i]将触发异常(幸运的是)。您的循环从 0 运行到 49,这对于posOp来说很好,但是eq 可能会更短。 您正在访问 eq 超出它的结尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM