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