Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Phát hiện tràn số nguyên (integer overflow) trong C++


Cách an toàn duy nhất là kiểm tra tràn trước khi nó xảy ra. Có vài cách "hack" để kiểm tra. Với cộng unsigned int, có thể kiểm tra xem kết quả có nhỏ hơn bất kỳ giá trị nào được cộng không.

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // hoặc "value < y" cũng được

Vì nếu x và y đều là unsigned int, khi cộng tràn, giá trị không thể lớn hơn bất kỳ cái nào vì nó phải lớn hơn max unsigned int để wrap around và vượt qua các giá trị này.

Cách khác: truy cờ Overflow (Overflow flag) của CPU. Một số trình biên dịch cung cấp truy cập cờ này nhưng không chuẩn.

Các cách khác chỉ cho ước lượng. Tham khảo: https://stackoverflow.com/a/199455/3719089