我应该将分配的内存清零吗?

时间:2015-06-06 12:39:35

标签: c++ linux windows memory

我正在编写tcp套接字,我正在使用struct sockaddr_in server_addr;来设置端口等。在一些教程中,我已经读过我应该在使用之前将server_addr的内存归零。我是不是该?我是否可以获得一些可能导致问题的数据记忆?它与Linux和Windows不同吗?

由于

3 个答案:

答案 0 :(得分:4)

这样做是个好主意,特别是在这种情况下。这些低级套接字struct以嵌套形式拥有数以万计的小成员。 memset确保它们都没有垃圾值。它非常简单,相对有效,并且可以清除难以发现的错误。

答案 1 :(得分:4)

如果不初始化保留的内存区域,它将包含之前存储的任何值。因此,将零归零是一个好主意,这意味着用一些值覆盖那里的东西,在这种情况下是空字节\0

如果您将malloc替换为calloc,则会自动为您完成此操作。

无论您是否这样做,它都不会影响您从套接字读取的值。

如果在Windows或Linux / Unix上执行此操作无关紧要:这是所有环境的常见行为。

答案 2 :(得分:1)

这取决于。你想在它写之前使用它吗?如果您确定在覆盖它之前不会从内存中读取内容 - 您可以将内存保留为零(这会花费额外的程序工作时间并且需要更多代码 - 代码越少越好)否则您必须初始化内存用零。