首页 > 解决方案 > 致命错误:线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)。我的代码不会运行

问题描述

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

我不知道该怎么办。我在谷歌上研究了这个话题,没有一个建议足够具体,可以提供帮助。

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;
        }
    }

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

姓名:脸书密码:1

名称:Reddit 密码:2

但相反,我得到:

名称:Reddit 密码:1

姓名:脸书密码:2

(lldb)

和最后的错误。

标签: c++stackexc-bad-access

解决方案


在您的代码中,循环值将在两次迭代后变为 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 次。


推荐阅读