【发布时间】:2013-08-06 19:28:21
【问题描述】:
我很难跟踪一个与内存分配有关的非常典型的 C 错误。我的一个缓冲区太短了一个字节。结果,一个字节的写入量超出了上限。
在大多数情况下,它没有效果;但在某些特定情况下,它会导致未来的操作失败(通常是 malloc,或另一个函数中的隐藏 malloc)。
使此类错误难以跟踪的原因是它们不会发生在错误所在的位置,从而导致初始诊断错误。而且它在调试模式下也永远不会发生,这使得搜索变得更加困难。
这种错误在 C 中很常见,并且是该语言长期存在的弱点。
那么有什么可以帮助的呢?
好吧,如果“一个字节太多”写入触发立即故障,它确实会有所帮助,首先要检测问题出在哪里,还要检测到是否有问题! (在前面的示例中,错误通过了所有测试并进入了生产阶段;噩梦般的情况......)。
这样的设置是否存在(在 C 中)? 我猜如果存在某种解决方案,它可能取决于平台。不过当然,如果有便携的,我就更感兴趣了。
[编辑] 感谢您提供非常好的答案。我看到没有灵丹妙药的解决方案,而是一套减轻问题的工具。我需要一些时间来研究您答案中提供的所有非常好的链接。
【问题讨论】:
标签: c memory-leaks malloc