-7

我有一个 linux 产品的三行(版本)。V1 在客户中运行良好。V2 和 V3 崩溃,修复似乎是 malloc 调用后的 memset 调用。

关于这个话题的更深层次的解释是什么?为什么 memset 解决了这个问题?

4

2 回答 2

3

如果没有代码示例,我的猜测是您正在对您 malloc 的缓冲区或结构进行操作,并假设其内容将使用某些默认值进行初始化。Malloc 不会初始化它返回的内存,因此除非您使用 memset 或使用其他初始化,否则该内存中的值可以是任何值,因此,如果您尝试检查指针,假设它是 NULL 或int 将为零,如果不先初始化内存,您将无法做出该假设。

于 2011-06-29T16:13:37.017 回答
2

可能是因为错误的假设是分配的缓冲区为零。因此,例如,如果缓冲区包含一个字符串并在初始化之前打印在某处,则可能导致访问冲突。将缓冲区归零可以解决这样的问题。

于 2011-06-29T16:12:10.067 回答