目录
条例一: binding to misaligned address
条例一: binding to misaligned address
翻译:绑定未对齐的地址
leetocode 225题,用队列完成栈,以下是出错部分代码
int pop() {
for(int i = 0; i < queue1.size()-1;i++){
queuebuf.push(queue1.front());
queue1.pop();
}
for(int i = 0; i < queue1.size()-1;i++){
queue1.push(queuebuf.front());
queuebuf.pop();
}
int result = queue1.front();
queue1.pop();
return result;
}
queue<int> queue1;
queue<int> queuebuf;
这里我没有注意queue1.size()在每次进入for循环时,都会改变数值,所以应该用临时变量存储queue1.size()。
也正是因为没考虑size(),导致第二轮循环时,queuebuf为空时,仍然进行front()的访问。
队列为空时,不能访问队列内的元素,也不能使用pop,因为此时是空队列,所以出现binding to misaligned address 这种错误(对于栈也是同理)
在vs2022里则会直接指出相应的错误:deque empty before pop
void test01()
{
queue<int> a;
a.push(10);
cout << a.front();
a.pop();
a.pop();
}
int main()
{
test01();
system("pause");
return 0;
}