为什么我们需要memset始终为零?

Ras*_*yak 2 c c++

每当我们使用时,memset我们将其设置为零.

为什么?为什么不用1或2或其他东西.

此外,将结构设置为0似乎工作但设置为1不起作用:

typedef struct abc{
    int a;
} abc;

int main()
{
    abc* ab;
    memset(ab, 0, sizeof(abc));// it sets abc->a = 0; correct
}
Run Code Online (Sandbox Code Playgroud)

但不是0如果我使用1像:

memset(ab, 1, sizeof(abc));
Run Code Online (Sandbox Code Playgroud)

然后是abc->a = garbage或的价值not equals to 1

为什么?

Duk*_*ing 12

你并不总是需要memset0,这只是最常见(也很有用)的事情.

memset将每个字节设置为某个给定值.一个int由4个字节组成,因此,当你memset进入时1,你将每个4设置为1,然后你有00000001 | 00000001 | 00000001 | 000000012 = 1684300910(第一个数字是二进制,最后一个是十进制).

另外 - 请注意,您永远不会为其分配内存ab.即使您的代码现在可以正常工作,也不安全.这将是:

abc ab;
memset(&ab, 0, sizeof(abc));
Run Code Online (Sandbox Code Playgroud)