簡體   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