【发布时间】:2021-01-20 21:17:12
【问题描述】:
从安全的角度来看,在释放内存后将指针设置为 NULL 据说是一种很好的做法。如果在释放内存之前将指针设置为 NULL 会发生什么?这将如何导致漏洞?
【问题讨论】:
-
不会造成安全漏洞,只会造成内存泄漏。这仅意味着如果您有太多内存泄漏,您的程序可能会终止。
-
旁注: 将 [freed] 指针设置为
NULL是一种很好的做法,原因有很多。 (1) 尽管您永远不应该在指针被释放后释放它,但将其归零会将第二个free变成“危害较小”的东西 [因为free忽略空值](与“双重释放”中止free)。 (2) 你不应该在指针被释放后取消引用/使用它,但是如果出现错误:(例如)free(ptr); val = *ptr;,这会产生 UB/不正确的结果 [静默]。执行free(ptr); ptr = NULL; val = *ptr;会导致错误的 deref 出现段错误,因此会注意到错误。 -
如果在传递给
free之前将指针设置为空,那么free怎么知道要释放什么?
标签: c pointers nullpointerexception nullreferenceexception dereference