在C++中,memset
函数用于将一段内存的值进行初始化。其函数原型为:
void *memset(void *ptr, int value, size_t num);
ptr
:指向要被设置值的内存块的指针。value
:要被设置的值。这是一个int
类型的值,但实际上是被强制转换为unsigned char
。num
:要被设置为值的字节数。
所以当你使用 memset(f, 1, sizeof f)
时,它会将 f
数组的每个字节的值都设置为 1,而不是将每个元素设置为 1。由于 f
数组是一个整型数组,每个整型占用多个字节(通常是 4 字节或 8 字节,具体取决于编译器和操作系统),因此 memset
将每个字节都设置为 1,这可能会导致数组元素的不确定值。
在这个问题中,你想要将数组 f
的每个元素初始化为 1,而不是每个字节。所以,应该使用 memset(f, 0, sizeof f)
来将整个数组初始化为 0,然后手动将每个元素设置为 1,如修正后的代码所示。
// 错误
memset(f, 1, sizeof f);
// 手动设置
for (int i = 1; i <= n; i++)
{
f[i] = 1;
}