c++ - 致命错误:线程 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)
和最后的错误。
解决方案
在您的代码中,循环值将在两次迭代后变为 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 次。
推荐阅读
- jquery - Kendo Grid Filter 使用 contains 运算符,从名称字段的开头开始过滤
- vim - 如何在 VIM 中将 Windows 控制台输出转换为 utf8
- java - 在没有 Mosby 的情况下在 Android 中实现 MVI 架构
- php - While 循环只运行一次,即使它在 foreach 中
- hive - Tableau 是否支持 Hive 列的复杂数据类型并将其展平?
- html - 如何制作基于网页的文章?
- c# - 如何更改 VS17 中 C# 预处理器指令属性的颜色?
- javascript - 从 react-bootstrap 导入任何组件都会引发错误
- javascript - Javascript cookie 未过期
- typescript - React Native Typescript 模板不应用更改