1

问题很简单:给定start_indexcount,我想看看这些组合是否可以用来安全地访问带有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。或者也许有其他一些聪明的方法来处理这个?

4

1 回答 1

2

你可以通过做一些不同的事情来避免溢出:首先检查count小于length(否则退出),然后你可以安全地start_index比较length - count.

于 2013-02-08T05:12:35.390 回答