1. 程式人生 > 其它 >今天才學會的DevC++偵錯程式檢視連續記憶體STL容器內值的方法

今天才學會的DevC++偵錯程式檢視連續記憶體STL容器內值的方法

眾所周知,DevC++是一個bug層出不窮的過時的IDE

但因為編譯single source方便,簡單易上手,還有一些OIer(包括蒟蒻)仍在使用它

如何避免在除錯的時候一碰到或者檢視C++的一些東西(比如STL容器,cout)就卡住,在OI在役的時候就一直困擾著我

沒想到退役這麼久後突然發現有一部分有解決方案了


這個方法本來是解決偵錯程式不把指標認為是陣列的問題的

像上面這個例子,a是一個數組,p是一個指向陣列的指標,偵錯程式看a能看到整個陣列,看p卻只能看到這個地址的16進位制值

我們新增檢視*p@5,這個神奇的@表示從記憶體裡p指的位置開始連續讀5個相同型別的值,就解決了上面提到的問題


於是我們也可以解決檢視vector的問題了

新增檢視a:不行,一是會卡住,二是看到的是一個結構體,有指向記憶體的指標,但看不到數

新增檢視a[0]:能看,不會卡住

新增檢視&a[0] *&a[0]:能看,得到了連續記憶體的起始地址,相當於得到了一個指向陣列的指標

新增檢視*&a[0]@5:我們看到了整個陣列

這種方法適用於使用連續記憶體的STL容器,比如vector queue string

諸如list map的話還是隻好老老實實printf了

ref:https://blog.csdn.net/qq_35818307/article/details/104965670