[英]C++ "deque iterator not dereferencable" exception is thrown in debug mode
在调试模式下运行我的代码时,我收到一个异常抛出错误“deque iterator not dereferencable”。 代码如下 -
#include "stdafx.h"
#include <string>
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> myqueue;
for (int i = 0; i < 1000; i++)
{
myqueue.push(i);
myqueue.front();
cout << "myqueue.front() is = " << myqueue.front() << endl;
myqueue.pop();
}
cout << "myqueue.front() is now = " << myqueue.front() << endl; /// Getting error here
getchar();
return 0;
}
当我在访问 myqueue.front() 之前检查队列的大小时,它不会因为下面修改的代码而崩溃 -
if (myqueue.size() > 0)
cout << "myqueue.front() is now = " << myqueue.front() << endl;
该代码在发布模式下完美运行,无需 (myqueue.size() > 0) 检查,但仅在调试模式下在运行时崩溃。
谁能帮我告诉我为什么它只在调试模式下崩溃。 以及如何摆脱调试模式下的错误。
您在这里触摸未定义的行为,因为即使您的std::queue<int>
为空,您也正在访问前端元素。 这就是为什么下面的语句:
std::cout << "myqueue.front() is now = " << myqueue.front() << std::endl;
有时可能会给你随机值(你的std::queue<int>
之前包含的值之一)或导致崩溃(这在你的情况下发生) - 未定义的行为。
这就是为什么在尝试访问它们之前检查std::queue
是否有任何元素总是一个好主意:
if (!myqueue.empty()) {
std::cout << "myqueue.front() is now = " << myqueue.front() << std::endl;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.