我有一个 C 代码应用程序。我正在使用 MS-VS2005 构建。我有一个使用 malloc 动态分配的输出数据缓冲区。
对于某些测试用例,正在 malloc 的内存大小低于生成的实际输出大小(以字节为单位)。较大的输出被写入较小的缓冲区,导致缓冲区溢出。结果,测试运行崩溃,MSVS-2005 显示一个窗口“堆损坏......”
我知道这与一些动态内存分配有关,但我花了很长时间才真正找到根本原因,因为我不怀疑内存分配,因为我分配了足够大的输出所需的大小。但是一个特定的测试用例产生的输出比我计算的要多,因此导致了崩溃。
我的问题是:
1.) 我可以使用哪些工具来检测这种动态内存缓冲区溢出情况。它们还可以帮助检测任何缓冲区溢出情况(无论缓冲区/数组是否位于堆、堆栈、全局内存区域)?
2.) 内存泄漏工具(比如 Purify)或 lint、klocworks 等代码分析工具在特定情况下会有所帮助吗?我相信它们必须是运行时分析工具。
谢谢你。
-广告。