【发布时间】:2016-01-31 03:44:04
【问题描述】:
我想知道并理解为什么我的小控制台程序在我运行它之后会崩溃,就在开始时,即使它编译成功。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::string> valueWithUnit;
{
std::string unit = '\0';
std::string convertNumb = '\0';
for (double forVal; std::cin >> forVal; ) {
std::cin >> unit;
if (unit != "cm" || unit != "m" || unit != "in" || unit != "ft") {
std::cout << "The unit you entered is not supported by this program.";
std::cout << " Try again with \"cm\", \"m\", \"in\", \"ft\"\n";
}
else {
convertNumb = forVal;
valueWithUnit.push_back(convertNumb + unit);
if (valueWithUnit[valueWithUnit.size() - 1] == "100cm") {
std::cout << "That's also 1 meter.\n";
}
else if (valueWithUnit[valueWithUnit.size() - 1] == "2.54cm") {
std::cout << "That's also 1 inch.\n";
}
else if (valueWithUnit[valueWithUnit.size() - 1] == "1in") {
std::cout << "That's also 2.54 centimeters.\n";
}
else if (valueWithUnit[valueWithUnit.size() - 1] == "1ft") {
std::cout << "That's also 12 inches.\n";
}
}
}
}
for (std::string i : valueWithUnit) {
std::cout << i << std::endl;
}
system("pause");
std::cin.ignore();
std::cin.get();
return 0;
}
当我调试它时,它告诉我:
Project1.exe 中 0x00191644 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000000。 如果有这个异常的处理程序,程序可以安全地继续。
似乎问题与我的矢量有关,但我仍然不明白。 提前致谢。
【问题讨论】:
-
它可以让你输入长度和单位吗?您是否单步执行代码并查看异常发生在哪一行?
-
如果您输入了一个无效的单位,程序将显示 UB。该向量将为空,然后将使用数组下标运算符
[]访问。是这样吗? -
不,它在我运行后立即崩溃。也找不到异常发生在哪一行。
-
这不是问题,但不要使用
std::endl,除非您需要它的额外功能。'\n'开始新的一行。