これは、MSDN ( http://msdn.microsoft.com/en-us/library/hh916383.aspx ) で提供されている例で、SAL 注釈が一般的な off-by-one エラーの検出に役立つことを説明しようとしています。
wchar_t * wmemcpy(
_Out_writes_all_(count) wchar_t *dest,
_In_reads_(count) const wchar_t *src,
size_t count)
{
size_t i;
for (i = 0; i <= count; i++) { // BUG: off-by-one error
dest[i] = src[i];
}
return dest;
}
この例がよくわかりません。この例では、関数シグネチャに というパラメーターが含まれているように見えるcount
ため、 を使用In_reads_(count)
して、指しているメモリ空間src
に少なくともそのようなバイト数があることを確認できます。
私の質問は、このような署名付きの関数がある場合はどうなるかです
memcpy_example(wchar_t* dest, wchar_t* src)
この場合、署名にはサイズに関する情報は含まれていません。SAL を使用してデバッガーにdest
と同じサイズまたは 1 バイト大きくするように指示できますsrc
か?