这是 MSDN ( http://msdn.microsoft.com/en-us/library/hh916383.aspx )上给出的一个示例,它试图解释 SAL 注释可以帮助找到一个常见的错误。
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
?