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

Should I zero the allocated memory?

我正在编程 tcp 套接字,我正在使用 struct sockaddr_in server_addr; 设置端口等。在一些教程中我读到我应该在使用它之前将 server_addr 的内存清零。我是不是该?是否有可能我会得到一些可能导致问题的数据的内存? linux 和 windows 有什么不同吗?

谢谢

这样做是个好主意,尤其是在这种情况下。这些低级套接字 struct 有无数嵌套形式的小成员。 memset 确保其中 none 具有垃圾值。非常简单,效率比较高,还可以清除比较难发现的bug。

如果您不初始化保留内存区域,它将包含之前存储在那里的任何值。所以 "zero it" 总是一个好主意,这意味着用一些值覆盖曾经存在的内容,在本例中是空字节 [=10=].

如果您将 malloc 替换为 calloc,这将自动为您完成。

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

在 Windows 或 Linux/Unix 上执行此操作并不重要:这是所有环境的常见行为。

视情况而定。在重写之前是否要使用它?如果您确定在覆盖之前不会从内存中读取 - 您可以将内存置零(这将花费额外的程序工作时间并且需要更多代码 - 代码越少越好)否则你必须初始化带零的内存。