2011-09-21 67 views
3

我想分析我的C++代碼以查找向量和數組中的訪問不良(超出範圍訪問),是否有一個工具呢?C++ - 檢測超出範圍的訪問

在此先感謝

+2

大多數C++實現都帶有經過檢查的標準庫實現,您是否檢查過您的文檔? – PlasmaHH

+2

寫得好的代碼是開始 - 自由地添加斷言。在運行時,您可以使用'valgrind'來檢查無效的內存訪問。 –

+2

你可以「斷言」你的代碼。對於vector,你可以用at替換[],這會拋出異常而不是未定義的行爲。 –

回答

10

如果您使用的是gcc,您可以使用_GLIBCXX_DEBUG和_GLIBXX_DEBUG_PEDANTIC進行編譯。這將使得glibc斷言在請求越界訪問時被引發。

測試用的valgrind :: MEMCHECK也將揭示壞的內存讀取

+1

這些標誌是非常有用的,但我最近發現他們產生** segfaults **的情況。如果您嘗試將它們與** boost正則表達式庫一起使用,則您的程序將失敗。我無法想象爲什麼會發生這種情況,還有其他什麼影響。詳情請參閱https://svn.boost.org/trac/boost/ticket/5911 –

+0

@ P.ChristopoulosCharitos發生這種情況是因爲,如票據中所述,Boost.Regex是用普通的ABI編譯的,而'_GLIBCXX_DEBUG'用它來改變它,因此使用它的應用程序由於ABI不匹配而崩潰。 – Ruslan

0

在該類0​​與運營商對您的陣列創建一個類,並創建一些控制功能和.... 然後使用這個類。