繁体   English   中英

在调试模式下抛出 C++“deque iterator not dereferencable”异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM