FATAL ERROR: Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT). My code won't run

FATAL ERROR: Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT). My code won't run

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

我不知道该怎么办。我研究了关于 Google 的主题,none 的建议足够具体,可以提供帮助。

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)

最后的错误。

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