C++錯(cuò)誤使用迭代器超出引用范圍問(wèn)題及解決方案
前言
今天在調(diào)用一個(gè)URI解析庫(kù)的時(shí)候,在clang的編譯器上代碼能正常編譯,在visual studio就提示迭代器的錯(cuò)誤了
相關(guān)錯(cuò)誤
cannot increment value-initialized string_view iterator
cannot dereference end string_view iterator
cannot increment string_view iterator past end
string iterator not dereferencable" you’ll get "cannot dereference string iterator because it is out of range (e.g. an end iterator)
錯(cuò)誤截圖


錯(cuò)誤代碼塊

錯(cuò)誤原因
if (end_ptr != &*auth_string.end())
{
return { authority, uri::Error::InvalidPort, auth_string };
}end()方法將迭代器返回到最后一個(gè)元素之后,指向字符串最后一個(gè)字符的下一個(gè)位置。由于它并不指向?qū)嶋H的字符,因此不能對(duì)該迭代器進(jìn)行解引用操作。
如果想訪問(wèn)最后一個(gè)元素,應(yīng)該使用
string.end() - 1:注意,該語(yǔ)句僅適用于非空字符串,否則將會(huì)越界訪問(wèn)string.back()string.at(string.size() - 1)
解決方案
方法1(推薦)
if (--end_ptr != &(auth_string.back()))
{
return { authority, uri::Error::InvalidPort, auth_string };
}方法2
if (--end_ptr != &*--auth_string.end())
{
return { authority, uri::Error::InvalidPort, auth_string };
}方法3
if (--end_ptr != &(auth_string.at(auth_string.size() - 1)))
{
return { authority, uri::Error::InvalidPort, auth_string };
}Visual Studio 更新日志
- Minor
basic_string _ITERATOR_DEBUG_LEVEL != 0diagnostics improvements. When an IDL check gets tripped in string machinery, it will now report the specific behavior that caused the trip. For example, instead of “string iterator not dereferencable” you’ll get “cannot dereference string iterator because it is out of range (e.g. an end iterator)”. - 次要
basic_string_ITERATOR_DEBUG_LEVEL != 0診斷改進(jìn)。 當(dāng) IDL 檢查在字符串機(jī)制中失誤時(shí),它現(xiàn)在會(huì)報(bào)告導(dǎo)致失誤的特定行為。 例如,現(xiàn)在會(huì)收到“無(wú)法取消引用字符串迭代器,因?yàn)槠湟殉龇秶ɡ缒┪驳鳎?rdquo;,而不是“字符串迭代器不可取消引用”。
在更新日志中已經(jīng)告訴了我們錯(cuò)誤的原因了

到此這篇關(guān)于C++錯(cuò)誤使用迭代器超出引用范圍分析與解決的文章就介紹到這了,更多相關(guān)C++迭代器超出引用范圍內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
cin.get()和cin.getline()之間的區(qū)別
以下是對(duì)cin.get()和cin.getline()的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-09-09
c語(yǔ)言函數(shù)如何求兩個(gè)數(shù)的最大值
這篇文章主要介紹了c語(yǔ)言函數(shù)如何求兩個(gè)數(shù)的最大值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
c語(yǔ)言實(shí)現(xiàn)的hashtable分享
哈希表效率高,眾所周知。應(yīng)用廣泛,php中大部分存儲(chǔ)使用的都是hashtable,包括變量,數(shù)組…如何使用c語(yǔ)言實(shí)現(xiàn)hashtable呢,現(xiàn)提供自己的思路,如有不妥之處,敬請(qǐng)賜教2014-01-01
淺談C語(yǔ)言共用體和與結(jié)構(gòu)體的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言共用體和與結(jié)構(gòu)體的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
C++實(shí)現(xiàn)LeetCode(7.翻轉(zhuǎn)整數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(7.翻轉(zhuǎn)整數(shù)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
深入學(xué)習(xí)C語(yǔ)言mmap和shm*的使用方法技巧
本文將詳細(xì)介紹mmap和shm的工作原理,包括它們?cè)趦?nèi)存映射和共享內(nèi)存方面的優(yōu)勢(shì)和適用場(chǎng)景,同時(shí),文章還會(huì)分享一些使用mmap和shm的技巧和經(jīng)驗(yàn),以幫助讀者優(yōu)化并提高程序性能,使你能夠在實(shí)際項(xiàng)目中更好地利用這些技術(shù)來(lái)加速數(shù)據(jù)共享和多線程應(yīng)用2023-10-10
快速解決boost庫(kù)鏈接出錯(cuò)的問(wèn)題(分享)
下面小編就為大家?guī)?lái)一篇快速解決boost庫(kù)鏈接出錯(cuò)的問(wèn)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05

