Project1.exe无缘无故地停止工作(C ++)

时间:2014-02-04 01:38:36

标签: c++

我在开发C ++中有一个C ++代码,突然间它只是说项目1.exe已停止工作,我不知道为什么

#include <iostream>

using namespace std;

int main()
{
    char *upasscode;
    char *spasscode;
    spasscode = ("FISH");
    cout<<"ENTER PASWWORD\n";
    cout<<"--------------\n";
    cin>> upasscode;
    if ( upasscode != spasscode ) {
         goto incorrect;
    }
    else {
         goto correct;
    }
    incorrect:
    cout<<"INCORRECT";
    system("pause>null");
    system("EXIT");
    correct:
    cout<<"Welcome!";
    system("pause>null");
    system("EXIT");
}

2 个答案:

答案 0 :(得分:1)

一个问题是,您的incorrect代码会流入您的correct代码,没有任何内容可以改变执行路径。
如果您喜欢goto,我建议如下:

incorrect:
cout<<"INCORRECT";
system("pause>null");
system("EXIT");
goto end_of_program;
correct:
cout<<"Welcome!";
system("pause>null");
system("EXIT");
end_of_program:
return 0;

或者你可以简化:

incorrect:
cout<<"INCORRECT";
goto end_of_program;
correct:
cout<<"Welcome!";
end_of_program:
system("pause>null");
return 0;
唉,可能还有更好的东西:

int main()
{
    char *upasscode;
    char *spasscode;
    spasscode = ("FISH");
    cout<<"ENTER PASWWORD\n";
    cout<<"--------------\n";
    cin>> upasscode;
    if ( upasscode != spasscode )
    {
         cout << "INCORRECT\n";
    }
    else
    {
         cout << "Welcome!\n";
    }
    system("pause>null");
    return EXIT_SUCCESS;
}

你真的需要system("EXIT")函数调用还是从main返回(退出)就足够了?

答案 1 :(得分:0)

cin >> upasscode;

upasscodechar*,没有分配内存。当您将输入提取到upasscode时,您将解除引用您不拥有的地址,从而解除未定义的行为。

相反,您可以使用std::string来动态调整自身大小以容纳额外的字符。

std::string spasscode;
std::cin >> spasscode;

此外,你正在使用goto这是一个非常糟糕的编程习惯。您总是可以以更好的方式重构您的程序。