问题很简单:给定start_index
和count
,我想看看这些组合是否可用于安全访问具有length
元素的数组。我暂时拥有以下内容:
uint32_t start_index = (value from somewhere);
uint32_t count = (value from somewhere);
uint32_t length = (value set earlier);
char *array = (memory allocated earlier);
if(start_index + count < length) {
// access array starting at start_index
} else {
// bailout
}
当然,检查是不合适的,因为start_index + count
可以超过uint32_t的最大可能值并回绕到一个小值。为了解决这个问题,我想知道将变量提升到64位还是放入第二个条件start_index + count > start_index
是否更有效。或许还有其他一些聪明的方法来处理这个问题?
答案 0 :(得分:2)
您可以通过稍微不同的方式避免溢出:首先检查count
是否小于length
(否则纾困),然后您可以安全地将start_index
与{{1}进行比较}}