今天报错:
AddressSanitizer: SEGV on unknown address (ERROR: AddressSanitizer: SEGV on unknown address (pc 0x00000034c8b0 bp 0x7fff28d35750 sp 0x7fff28d35620 T0)42The signal is caused by a READ memory access.42Hint: this fault was caused by a dereference of a high value address (see register values below). Dissassemble the provided pc to learn which register was used.
#3 0x7f53b03ae082 (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
AddressSanitizer can not provide additional info.
42ABORTING
里面显示:
提示:此错误是由高值地址的取消引用引起的
更改内容:
if(t.top()=='[') t.pop();
改成
if(!t.empty() &&t.top()=='[') t.pop();
总结原因:没有判断栈为空就读取栈顶元素
全部代码(c++)
class Solution {
public:
bool isValid(string s) {
stack<char> t;
int len=s.size();
// if(len==0)return true;
if(len%2!=0) return false;
for(int i=0;i<len;i++){
if(s[i]=='('||s[i]=='['||s[i]=='{'){
t.push(s[i]);
}else{
switch(s[i]){
case ']':
if(!t.empty() &&t.top()=='[') t.pop();
else return false;
break;
case '}':
if(!t.empty() &&t.top()=='{') t.pop();
else return false;
break;
case ')':
if(!t.empty() &&t.top()=='(') t.pop();
else return false;
break;
}
}
}
if(t.empty())return true;
else return false;
}
};