1

問題は非常に単純です:与えられた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 + countuint32_t の最大可能値を超えて小さな値にラップアラウンドする可能性があるため、チェックはもちろん不十分です。これを修正するには、変数を 64 ビットにプロモートするか、2 つ目の条件を設定する方が効率的かどうか疑問に思いますstart_index + count > start_index。それとも、これを処理するための他の賢い方法があるのでしょうか?

4

1 に答える 1

2

オーバーフローを回避するには、少し異なる方法を使用します。まずcountより小さいをチェックしlength(そうでない場合は救済)、 と安全に比較できstart_indexますlength - count

于 2013-02-08T05:12:35.390 に答える