c++ - 使用 Stack 时的分段错误到底是什么以及如何修复它?
问题描述
我正在编写一个程序来检查括号的分数,Leetcode 问题 856。但是,使用我使用的算法,我遇到了“Segmentation Fault (core dumped)”错误。我不确定使用堆栈时如何出现分段错误,我该如何解决?
string s;
cin >> s;
int score = 0;
stack<int> st;
for (int i = 0; i < s.size(); i++){
char a = s[i];
if (a == '('){
st.push(score);
score = 0;
}
else{
score = st.top() + max(score*2, 1);
st.pop();
}
}
cout << score;
}
解决方案
当堆栈为空并且您尝试 .top() 或 .pop() 时,它将给出分段错误(由访问内存引起的错误)。
string s;
cin >> s;
int score = 0;
stack<int> st;
for (int i = 0; i < s.size(); i++){
char a = s[i];
if (a == '('){
st.push(score);
score = 0;
}
else if(!st.empty()){
score = st.top() + max(score*2, 1);
st.pop();
}
}
cout << score;
}
推荐阅读
- excel - Breaklinks in PowerPoint running but not working
- java - 使用文件或 S3 路径
- php - Prod 上的 Composer 安装问题,本地环境没有问题
- x86 - 英特尔处理器的 TLB ASID 标签中有多少位?以及如何处理“ASID 溢出”?
- django - 排除特定 HTTP 方法的 swagger 文档
- angular - Angular提供者和providedIn导致循环依赖
- javascript - 使用使用 inboxsdk 创建的自定义按钮发送邮件?
- windows - 如何批量使用多个参数?
- ms-access - Ms Access 记录太大 - 法语字符
- vb.net - VB.NET:DialogResult.No 没有关闭表单