【问题标题】:c++ Exception thrown at 0x7A45FF80 (ucrtbased.dll) in ConsoleApplication1.exe: 0xC0000005: Access violation reading location 0x00000000在 ConsoleApplication1.exe 中的 0x7A45FF80 (ucrtbased.dll) 处引发 c++ 异常:0xC0000005:访问冲突读取位置 0x00000000
【发布时间】:2021-02-14 09:39:39
【问题描述】:

运行此代码时出现错误,我不知道它是什么,我在 Visual Studio 应用程序中的字符串中出现错误

错误 " 在 ConsoleApplication1.exe 中的 0x7A45FF80 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000000。"

#include <iostream>
using namespace std;
#include <string>

int main()
{
    float userinput01 = 0, userinput02 = 0;
    float avareg = 0;
    string option = 0;

    cout << "Welcome to Calculator app!\n" << "What is the desired operation?\n\nChoose the operation letter:\n" << endl;
    cout << "a- Additon\n" << "b- Subtraction\n" << "c- Multiplicstion\n" << "d- Division\n" << endl;

    if (option == "a") {
        cout << "Additon" << endl;
        cin >> userinput01 >> userinput02;
        avareg = userinput01 + userinput02;
        cout << userinput01 << "+" << userinput02 << "= " << avareg << endl;
    }
    else if (option == "b") {
        cout << "Subtraction" << endl;
        cin >> userinput01 >> userinput02;
        avareg = userinput01 - userinput02;
        cout << userinput01 << "-" << userinput02 << "= " << avareg << endl;
    }
    else if (option == "c") {
        cout << "Multiplicstion" << endl;
        cin >> userinput01 >> userinput02;
        avareg = userinput01 * userinput02;
        cout << userinput01 << "*" << userinput02 << "= " << avareg << endl;
    }
    else if (option == "d") {
        cout << "Division" << endl;
        cin >> userinput01 >> userinput02;
        avareg = userinput01 / userinput02;
        cout << userinput01 << "/" << userinput02 << "= " << avareg << endl;
    }
    else
        cout << "You did not choose a correct letter" << endl;

    return 0;
}

【问题讨论】:

  • string option = 0; -- 这是做什么的?另外,既然您使用的是 Visual C++,为什么不使用调试器来查明该行是导致问题的原因?几个F10 击键就会显示这一点。
  • string option = 0; 添加到我使用 C++ 射击自己的优雅方法集合中...

标签: c++


【解决方案1】:

string option = 0; 是罪魁祸首,string option; 是解决办法。

后者依赖于std::string默认构造函数。

前者会导致const char* 的构造函数被调用,结果未定义。

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多