ФАТАЛЬНАЯ ОШИБКА: Поток 1: EXC_BAD_ACCESS (код = EXC_I386_GPFLT). Мой код не запускается - PullRequest
0 голосов
/ 18 мая 2019

Когда я запускаю свою программу с заранее заданными входами, я получаю сообщение об ошибке. Что может быть причиной и как я могу это исправить?

Я не знаю, что делать. Я исследовал тему в 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 голосов
/ 19 мая 2019

В вашем коде значение цикла станет 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();
    //...
}

Таким образом, вы складываете стек 3 раза, в то время как есть только 2 элемента.

...