c++ - 使用 Stack 时的段错误到底是什么以及如何修复它?

标签 c++ c++11

我正在编写一个程序来检查括号的分数,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;
}

关于c++ - 使用 Stack 时的段错误到底是什么以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64441129/

相关文章:

c++ - clang 3.1 看不到 unique_ptr?

c++ - 在 C++ 作业问题中测试字符串输入时无法退出 while 循环(作为数据验证)

c++ - boost multi_index_container 损坏的索引

c++ - 来自 std::unique_ptr 的 STL 容器的 find() 线程安全

c++ - x = std::move(x) 未定义吗?

c++ - C++ 11支持Unicode的程度如何?

c++ - 为什么将函数名用作函数指针等同于将寻址运算符应用于函数名?

c++ - 在 NetBeans 中获取运行失败(退出值 127)

c++,如何一次将几个简单的 vector 写入二进制文件

c++ - 可变参数模板 lambda 扩展