【发布时间】:2020-10-28 06:35:24
【问题描述】:
没有理由让realloc() 变小会失败。它正在释放剩余部分。我认为它没有任何失败的理由。话虽如此,是否可以安全地假设 realloc()ing 到较小的尺寸永远不会失败?
【问题讨论】:
-
不要假设任何事情。始终检查错误。
-
C 标准不要求
realloc在新大小更小的情况下成功。我们可以想象一个为调试目的而构建的内存分配库,它故意为每次分配提供新内存,并在每个释放的空间上写入指示数据,以便更容易检测到释放空间的错误使用。在这样的库中,将realloc转换为较小的大小可能会失败,因为没有可提供的新内存。因此,C 标准允许这样做,并且有充分的理由发生这种情况。 -
一旦你开始假设某事不会失败,你就会认为当你看不到失败的原因时你不需要检查事情。使用 C 的良好做法是进行这些检查。