为什么我得到以下代码地址清理器:未知地址错误的SEGV


'''
#include<stack>
using namespace std;
class Solution {
public:
bool isValid(string s) {
stack<char> mystack;
char c;
for(int i=0;i<= s.length();i++){

if(s[i]=='(' || s[i]=='{' || s[i]== '[')
mystack.push(s[i]);
if(i!=0){
switch (s[i]){
case ')':
if(mystack.top()== '(')
mystack.pop();
else return false;
case '}':
if(mystack.top()== '{')
mystack.pop();
else return false;
case ']':
if (mystack.top()== '[')
mystack.pop();
else return false;
}
}
if(i==s.length() && !mystack.empty())
return false;

} 
return true;
}
};'''

我不知道为什么,但我收到此错误 地址清理器:未知地址0x000000000000上的 SEGV(pc 0x000000383dd4 bp 0x7ffc40c5d970 sp 0x7ffc40c5d860 T0(,带有提示**地址指向零页面**有人可以解释为什么我得到这个以及如何解决这个问题。 提前感谢!

这段代码包含了很多错误。但错误的原因实际上是在开关外壳的if条件内

if( mystack.top() )

在这里,我正在访问堆栈的顶部元素,而不检查它是否存在,因此是未知地址。 它应该是

if( !mystack.empty() && mystack.top())

这是编译器检查您要查找的地址是否存在,如果它存在,则只有它会尝试访问该值。

我作为一个菜鸟程序员问过这个问题,经过几个月的编程,我自己调试了这个。

最新更新