Trong clang, có cách nào để bật kiểm tra giới hạn cho truy cập [] tới std :: vectơ và các vùng chứa STL khác, tốt nhất là khi chỉ xây dựng ở chế độ gỡ lỗi?Bounds kiểm tra std :: vector (và các container khác) trong clang?
Tôi vừa bỏ ra hàng giờ để tìm kiếm một lỗi nhỏ mà hóa ra là do chúng tôi truy cập vào phần cuối của một std :: vector. Nó không cần phải làm bất cứ điều gì thông minh khi nó phát hiện lỗi, chỉ cần bẫy trong trình gỡ lỗi để tôi có thể tìm ra nơi nó xảy ra và sửa chữa nó trong mã.
Có cách nào để thực hiện việc này ngoài cách "tạo loại của riêng bạn mà kế thừa từ std :: vector" mà tôi muốn tránh không?
(Tôi đang sử dụng phiên bản kêu vang 3.1 nếu mà làm cho một sự khác biệt.)
Vâng, sử dụng 'at()' thay vì 'toán tử []'. Điều đó được định nghĩa để cung cấp cho bạn giới hạn thời gian chạy kiểm tra –
Tôi khuyên bạn không nên sử dụng tại(). Trong khi nó ném một ngoại lệ, đây không phải là giúp đỡ nhiều, vì thường không có kiểm tra ngoại lệ chặt chẽ được thực hiện xung quanh mã vectơ. Các lỗi out_of_range xa hơn là các lỗi thông thường, do đó chúng không được theo dõi bằng cách sử dụng các ngoại lệ, nhưng gỡ lỗi các trình trợ giúp và xác nhận. – Martin