leetcode报错:reference binding to misaligned address 0xbebebebebebec0ba for type ‘int‘, which requir 4
·
leetcode,剑指offer 31题报错:
Line 170: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for type 'int', which requires 4 byte alignment (stl_deque.h) 0xbebebebebebec0ba: note: pointer points here <memory cannot be printed> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_deque.h:180:16
代码:
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped)
{
stack<int> stk;
int i = 1, j = 0, n = pushed.size();
// if(n == 0)
if(n == 0 || (n == 1 && pushed[0] == popped[0]))
{
return true;
}
stk.push(pushed[0]);
while(i < n)
{
while(i<n && stk.top() != popped[j])
{
stk.push(pushed[i]);
++i;
}
while(!stk.empty() && stk.top() == popped[j])
{
stk.pop();
j++;
}
}
return stk.empty();
}
};
原因:
网上查是数组越界问题,经检查程序验证:
为非法访问地址,不只是数组越界。本程序报错原因为:
栈stack<int> stk;为空时访问了stk.top()。
解决办法:
stk.top()前加一个栈空判断即可,即stk.empty() && stk.top();
改正后代码:
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped)
{
stack<int> stk;
int i = 1, j = 0, n = pushed.size();
if(n == 0 || (n == 1 && pushed[0] == popped[0]))
{
return true;
}
stk.push(pushed[0]);
while(i < n)
{
while(i < n && (stk.empty() || stk.top() != popped[j]))
{
stk.push(pushed[i]);
++i;
}
while(!stk.empty() && stk.top() == popped[j])
{
stk.pop();
j++;
}
}
return stk.empty();
}
};
更多推荐
已为社区贡献2条内容
所有评论(0)