严重错误:线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)。我的代码无法运行

时间:2019-05-18 20:51:53

标签: c++ stack exc-bad-access

当我使用预定的输入运行程序时,出现错误消息。可能是什么原因导致的,我该如何解决?

我不知道该怎么办。我已经在Google上研究了该主题,但没有一个建议足够具体。

void alpha_Array(){
        std::string nameArr[50];
        nameArr[0] = "Reddit";
        nameArr[1] = "Facebook";
        std::string passArr[50];
        passArr[0] = "1";
        passArr[1] = "2";
        std::stack<std::string> organiser;
        std::stack<std::string> passwordStack;
        int loops = 1;
        organiser.push(nameArr[0]);
        passwordStack.push(passArr[0]);
        for(int x = 1; x < 50; x++){
            loops++;
            std::string best = organiser.top();
            std::string bestPass = passwordStack.top();
            std::string newStr = nameArr[x];
            std::string newPass = passArr[x];
            if (nameArr[x].empty()){
                break;
            }
            std::string tipTop = alpha_Compare(best, newStr, 0);
            if (tipTop == best){
                organiser.pop();
                organiser.push(newStr);
                organiser.push(best);
                passwordStack.pop();
                passwordStack.push(newPass);
                passwordStack.push(bestPass);
            }
            else{
                organiser.push(newStr);
                passwordStack.push(newPass);
            }

        }
        for (int x = 0; x < loops; x++){
            std::string name = organiser.top();
            organiser.pop();
            std::string password = passwordStack.top();
            passwordStack.pop();
            std::cout<<"Name: "<<name<<std::endl<<"Password: "<<password<<std::endl<<std::endl;
        }
    }

我希望会有一个格式化的响应,例如:

名称:Facebook 密码:1

名称:Reddit 密码:2

但是我得到了:

名称:Reddit 密码:1

名称:Facebook 密码:2

(lldb)

最后还有错误。

1 个答案:

答案 0 :(得分:0)

在您的代码中,两次迭代后循环值将变为3。

int loops = 1;
for(int x = 1; x < 50; x++){
    loops++;
    //...
}

现在在此部分代码中,您需要迭代3次:

for (int x = 0; x < loops; x++) {
    std::string name = organiser.top();
    organiser.pop();
    //...
}

因此,当只有2个元素时,您将堆栈弹出3次。