ポインターによるバッファー・オーバーフロー

ポインターによるメモリーへの書き込みでバッファー・オーバーフローが発生します。

これは、バッファー・オーバーフロー・エラーの 1 つで、ポインターによるアクセスで発生します。配列へのポインターに、その配列の範囲外へのインデックスが渡されています。例えば、4 つの要素を持つ配列へのポインターが 3 番目の要素を指している場合、このポインターに渡すことができるインデックスの値は -2 から +1 の間でなければなりません。

このエラーが動的に割り当てられたストレージで発生すると、通常はそのストレージが割り当てられた場所も表示されます。

場合によっては、インデックス、オフセット、サイズを正確に特定できないことがあります。この場合、バッファー・オーバーフローの "可能性がある" と診断されます。例えば、解析の結果、オフセットは 10 以下、インデックスは 20 以下、サイズは 25 以下でなければならないと判断された場合、 同時にすべての値が上限を超えると、バッファー・オーバーフローが発生します。ただし、これらの値のいずれかが上限を超えてもバッファー・オーバーフロー・エラーが発生する可能性があります (例えば、オフセットが 9、インデックスが 19、サイズが 26 の場合)。

解析によって判断された状態が不可能な場合であっても、バッファー・オーバーフローが発生しないようにしなければなりません。

ID

問題箇所

説明

1

バッファー・オーバーフロー

境界エラーの場所


#include <stdio.h>

int main(int argc, char **argv)
{
    int a[4] = {1,2,3,4};
    int * ptr;

    ptr = &a[2];
    printf("%d\n", ptr[2]); // bad - indexes off end of array using pointer
    return 0;
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。