回答
如果您使用的是gcc,您可以使用_GLIBCXX_DEBUG和_GLIBXX_DEBUG_PEDANTIC進行編譯。這將使得glibc斷言在請求越界訪問時被引發。
測試用的valgrind :: MEMCHECK也將揭示壞的內存讀取
這些標誌是非常有用的,但我最近發現他們產生** segfaults **的情況。如果您嘗試將它們與** boost正則表達式庫一起使用,則您的程序將失敗。我無法想象爲什麼會發生這種情況,還有其他什麼影響。詳情請參閱https://svn.boost.org/trac/boost/ticket/5911 –
@ P.ChristopoulosCharitos發生這種情況是因爲,如票據中所述,Boost.Regex是用普通的ABI編譯的,而'_GLIBCXX_DEBUG'用它來改變它,因此使用它的應用程序由於ABI不匹配而崩潰。 – Ruslan
是的:Valgrind。
等等:http://en.wikipedia.org/wiki/Memory_debugger。
還要注意的是, std::vector
有一個調試模式,他們將執行運行時界限檢查。
在該類0與運營商對您的陣列創建一個類,並創建一些控制功能和.... 然後使用這個類。
- 1. 陣列超出範圍檢測
- 2. PHP:超出範圍的變量訪問
- 3. 檢查超出C的範圍
- 4. 當UITableViewCell超出範圍時檢測到
- 5. as3 - 檢測超出範圍值w/parseInt()
- 6. 測試超出範圍
- 7. Objective-C - 訪問/初始化超出範圍問題的對象
- 8. 訪問變量超出範圍? nodejs
- 9. 無法訪問變量 - 超出範圍
- 10. React JS訪問變量超出範圍
- 11. Objective-C超出範圍問題
- 12. 在c中訪問超出數組的範圍
- 13. 向量超出範圍 - C++
- 14. C# - 索引超出範圍
- 15. 內存超出範圍C++
- 16. C++:索引超出範圍
- 17. C++超出範圍異常
- 18. C++超出下標範圍
- 19. C#索引超出範圍
- 20. 向量超出範圍C++
- 21. 保存超出範圍C#
- 22. 訪問變量超出回調範圍C++
- 23. C#不能訪問列表元素 - 參數超出範圍
- 24. 蟒:超出範圍
- 25. RowIndex超出範圍
- 26. Java超出範圍
- 27. 多維數組超出範圍檢查
- 28. NSNumber超出範圍?
- 29. googletesting超出範圍
- 30. 索引超出範圍(範圍可變)
大多數C++實現都帶有經過檢查的標準庫實現,您是否檢查過您的文檔? – PlasmaHH
寫得好的代碼是開始 - 自由地添加斷言。在運行時,您可以使用'valgrind'來檢查無效的內存訪問。 –
你可以「斷言」你的代碼。對於vector,你可以用at替換[],這會拋出異常而不是未定義的行爲。 –