[英]C++ Unhandled exception: An invalid parameter was passed to a function that considers invalid parameters fatal
[英]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.